Как получить текущую активность с 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));