Как мне выполнить модульное тестирование того, что моя служба Android запустила определенную активность?
Согласно этому другому вопросу, можно начать Activity
из Service
,
Как я могу, в ServiceTestCase
юнит тест правильный Intent
передается startActivity()
?
ActivityUnitTestCase
имеет полезный метод getStartedActivityIntent()
, И я смог проверить обратное - что Activity
начал Service
- в ActivityUnitTestCase
передавая ContextWrapper
в его setActivityContext()
метод, как в этом другом вопросе.
Но ServiceTestCase
кажется, не имеет аналогов для getStartedActivityIntent()
или же setActivityContext()
это помогло бы мне здесь. Что я могу сделать?
1 ответ
Оказывается, ответ правильный в документах для ServiceTestCase
,
Существует эквивалент setActivityContext()
и это называется setContext()
, Так что вы можете позвонить getContext()
, оберните контекст с ContextWrapper
и позвоните setContext()
так же, как с ActivityUnitTestCase
, Например:
private volatile Intent lastActivityIntent;
@Override
protected void setUp() throws Exception {
super.setUp();
setContext(new ContextWrapper(getContext()) {
@Override
public void startActivity(Intent intent) {
lastActivityIntent = intent;
}
});
}
protected Intent assertActivityStarted(Class<? extends Activity> cls) {
Intent intent = lastActivityIntent;
assertNotNull("No Activity started", intent);
assertEquals(cls.getCanonicalName(), intent.getComponent().getClassName());
assertTrue("Activity Intent doesn't have FLAG_ACTIVITY_NEW_TASK set",
(intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0);
return intent;
}