假设我有一个活动 A,它从其onCreate()
方法中启动另一个活动 B,期待结果。
如何使用 Robolectric 获得活动 B?
假设我有一个活动 A,它从其onCreate()
方法中启动另一个活动 B,期待结果。
如何使用 Robolectric 获得活动 B?
这个怎么样:
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();
也许您可以验证按钮启动的活动是否符合预期?
button.performClick();
assertThat(activity, new StartedMatcher( SecondActivity.class));
从机器人文档:
[...],Robolectric 只能验证第二个活动是否已经启动,但不能验证它是否实际启动。
因此,您无法获得 Activity 本身,但您可以拦截正在传递的 Intent 并检查是否会启动正确的 Activity。
为此,您可以使用Shadows
. 这是检查是否在's方法ActivityB
期间启动的代码(注意:我使用的是 Kotlin,但 Java 代码看起来几乎相同)。ActivityA
onCreate
// 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
方法 fromShadowActivity
返回正在启动的意图。您可以检查它的组件以查看它是否与您想要的匹配,甚至可以检查 Bundle 内部以查看您是否传递了所需的所有内容。
文档getNextStartedActivity
:http ://robolectric.org/javadoc/3.0/org/robolectric/shadows/ShadowContextWrapper.html#getNextStartedActivity--