6

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

如何使用 Robolectric 获得活动 B?

4

3 回答 3

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();
于 2015-06-09T13:35:54.747 回答
0

也许您可以验证按钮启动的活动是否符合预期?

    button.performClick();
    assertThat(activity, new StartedMatcher( SecondActivity.class));
于 2011-10-19T21:41:38.270 回答
0

机器人文档

[...],Robolectric 只能验证第二个活动是否已经启动,但不能验证它是否实际启动。

因此,您无法获得 Activity 本身,但您可以拦截正在传递的 Intent 并检查是否会启动正确的 Activity。

为此,您可以使用Shadows. 这是检查是否在's方法ActivityB期间启动的代码(注意:我使用的是 Kotlin,但 Java 代码看起来几乎相同)。ActivityAonCreate

// 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 内部以查看您是否传递了所需的所有内容。

文档getNextStartedActivityhttp ://robolectric.org/javadoc/3.0/org/robolectric/shadows/ShadowContextWrapper.html#getNextStartedActivity--

于 2018-07-23T14:20:34.197 回答