假设我有一个活动A,它从onCreate()
方法中启动另一个活动B,期待结果。
如何使用Robolectric获得活动B?
答案 0 :(得分: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();
答案 1 :(得分:0)
也许您可以验证按钮启动的活动是否符合预期?
button.performClick();
assertThat(activity, new StartedMatcher( SecondActivity.class));
答案 2 :(得分:0)
[...],Robolectric只能验证第二个活动是否已经启动,而不能验证它实际上是否已经启动。
因此您无法直接获得该活动,但可以拦截正在传递的Intent并检查是否可以启动正确的活动。
为此,您可以使用Shadows
。这是检查ActivityB
的{{1}}方法期间是否启动ActivityA
的代码(注意:我使用的是Kotlin,但Java代码看起来几乎一样)。
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
方法返回正在启动的意图。您可以检查其组件是否符合您的要求,甚至可以在Bundle中检查是否传递了所需的一切。
ShadowActivity
的文档:http://robolectric.org/javadoc/3.0/org/robolectric/shadows/ShadowContextWrapper.html#getNextStartedActivity--