Intent を介して渡されるエクストラに依存するクラスの Android Junit テストを作成しています。クラスを適切に動作させることができましたが、テストがまだ失敗するため、そのようなクラスの単体テストを作成する方法を知りたいです。
public class AddClassEvent extends Activity{
private String eventType;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
final String cNo = extras.getString("CourseNum");
// create a model instance
final StudentDBModel model = new StudentDBModel(this);
setContentView(R.layout.add_class_event);
.....
.....
}
}
テストクラスは次のようになります...
public class AddClassEventTest extends ActivityInstrumentationTestCase2<AddClassEvent>{
private StudentDBModel model = null;
private RenamingDelegatingContext context = null;
public AddClassEventTest() {
super("com.UI", AddClassEvent.class);
}
/**
* This method is called before each test.
*/
@Override
public void setUp() {
context = new RenamingDelegatingContext(getActivity(), "test_");
model = new StudentDBModel(context);
}
/*
* This function will test addNewClassEvent() from StudentDBModel
*/
public void testAddNewClassEvent(){
ContentValues courseValues = new ContentValues();
courseValues.put("CourseId", "60-415");
courseValues.put("CourseName", "Advanced Database Design");
courseValues.put("Section", "1");
courseValues.put("Location", "Erie");
courseValues.put("Credit", "3");
courseValues.put("ProfEmail", "rfortier@uwindsor.ca");
courseValues.put("Website", "cs.uwindsor.ca");
model.addNewCourses(courseValues);
int numEventsBefore = model.getNumClassEvents();
ContentValues values = new ContentValues();
values.put("EventName", "Assignment 1");
values.put("CourseId", "60-415");
values.put("EventType", "Assignment");
values.put("EventWeight", "8");
values.put("DueDate", "10/20/2010");
model.addNewClassEvent(values);
int numEventsAfter = model.getNumClassEvents();
assertEquals(numEventsBefore + 1, numEventsAfter);
}
}
問題は、クラス AddClassEvent に渡すエクストラが、別のクラスで作成され、Intent を介して AddClassEvent に渡される DB の PK であることです。テストを実行するたびに、次の行で NULL ポインター例外が発生します。
final String cNo = extras.getString("CourseNum");
Junit テストでエクストラから情報を作成するにはどうすればよいですか? このテストを機能させる方法はありますか? 私は広範囲に検索しましたが、答えが見つかりません。Junit テストでエクストラを誤って作成して、他のクラスによって作成されていると思わせる方法はありますか? もしそうなら、誰かが私にその方法を教えてもらえますか?
わかりましたので、あなたのアドバイスを取り入れようとしました。setUp 関数を次のように変更しました。
@Override
public void setUp() {
context = new RenamingDelegatingContext(getActivity(), "test_");
model = new StudentDBModel(context);
Intent addEvent = new Intent();
addEvent.setClassName("com.UI", "com.UI.AddClassEvent");
addEvent.putExtra("CourseNum", "60-415");
setActivityIntent(addEvent);
getActivity();
}
しかし、まだ NULL ポインター例外が発生しています。私の構文は間違っていますか?助言がありますか?