Как получить текущую активность с Robolectric?

Предположим, у меня есть действие A, которое запускает другое действие B из своего onCreate() метод, ожидая результатов.

Как получить активность B с использованием Robolectric?

3 ответа

Как насчет этого:

ActivityA activityA = setupActivity(ActivityA.class);
// Start other activity by e.g. pushing on a button
Intent intentForB = shadowOf(activityA).peekNextStartedActivity();
ActivityB activityB = buildActivity(ActivityB.class).withIntent(intentForB)
    .create().get();

Из робототехнической документации:

[...] Robolectric может только подтвердить, что второе действие было запущено, но не то, что оно фактически запущено.

Таким образом, вы не можете получить действие само по себе, но вы можете перехватить переданное намерение и проверить, было ли запущено правильное действие.

Для этого вы можете использовать Shadows, Вот код, чтобы проверить, если ActivityB запускается во время ActivityA"s onCreate метод (примечание: я использую Kotlin, но код Java выглядит примерно так же).

// The activity should be built using Roboletric's method
val activityA = Robolectric.buildActivity(ActivityA::class.java)
            .setup() // setup calls onCreate and onResume
            .get()

// now we need a Shadow (spooky!) to verify the next activity is started
val shadowOfA = Shadows.shadowOf(activityA)

// with the shadow it is easy if ActivityB was launched
assertThat(shadowOfA.getNextStartedActivity().getComponent())
            .isEqualTo(ComponentName(activityA, ActivityB::class.java))

getNextStartedActivity метод из ShadowActivity возвращает начатое намерение Вы можете проверить его компоненты, чтобы увидеть, соответствует ли он тому, что вы хотите, и даже проверить в Bundle, чтобы убедиться, что вы передаете все, что вам нужно.

Документация для getNextStartedActivity: http://robolectric.org/javadoc/3.0/org/robolectric/shadows/ShadowContextWrapper.html

Может быть, вы могли бы проверить, что активность, которую запустила кнопка, соответствует ожидаемой?

    button.performClick();
    assertThat(activity, new StartedMatcher( SecondActivity.class));
Другие вопросы по тегам