Я пишу андроидский тест Юнита для класса, который опирается на дополнения, переданные ему через намерение. Я смог заставить класс работать нормально, но мне все равно хотелось бы знать, как написать единичный тест для такого класса, поскольку тест все еще не работает.Как написать тест андроида JUnit, когда моя деятельность зависит от дополнительных параметров, переданных через Intent?
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", "[email protected]");
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 является ПК для моей БД, которая создается в другом классе и прошел к AddClassEvent через намерение. Всякий раз, когда я запускаю тест я получаю исключение NULL указателя на на линии:
final String cNo = extras.getString("CourseNum");
Как создать информацию из дополнительных в тесте JUnit? Есть ли способ заставить этот тест работать? Я много искал и не могу найти ответ. Есть ли способ ложно создать дополнительные функции в тесте Junit, чтобы он думал, что он создается другим классом? Если да, может кто-нибудь, пожалуйста, покажите мне, как?
ОК, так что я пытался взять ваши советы, и я изменил свою функцию конфигурацию:
@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 указателя. Является ли мой синтаксис неправильным? Какие-либо предложения?
Когда вы используете putExtra(), вам нужно включить префикс пакета с именем. Пример: addEvent.putExtra («com.ui.CourseNum», «60-415»); – McStretch 2010-12-01 20:50:51