Как мне выполнить модульное тестирование того, что моя служба 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;
}
Другие вопросы по тегам