Как мне написать тест Android JUnit, если моя деятельность зависит от дополнительных функций, переданных через намерение?

Я пишу тест 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, - это PK для моей БД, которая создается в другом классе и передается в AddClassEvent через намерение. Всякий раз, когда я запускаю тест, я получаю исключение указателя 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 Pointer. У меня неправильный синтаксис? Есть предложения?

18
задан Steve Westfall 1 December 2010 в 20:40
поделиться