如何通过Robolectric获得当前活动?

时间:2011-08-30 20:08:41

标签: android unit-testing robolectric

假设我有一个活动A,它从onCreate()方法中启动另一个活动B,期待结果。

如何使用Robolectric获得活动B?

3 个答案:

答案 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)

来自Roboletric documentation

  

[...],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--