如何使用robolectric来测试额外数据的启动意图

时间:2012-09-20 08:12:35

标签: android testing android-intent robolectric

在一项活动中,我用一些随机的额外数据开始了一个新的Intent:

Intent newIntent = new Intent(this, UserActivity.class);
newIntent.putExtra("key", generateRandomKey());
startActivity(newIntent);

我测试了这样:

Intent intent = new Intent(myactivity, UserActivity.class);
Assert.assertThat(activity, new StartedMatcher(intent));

它失败了,因为我的测试代码中的intent没有额外数据key

由于key是随机的,因此很难提供相同的密钥。所以我只想测试意图的目标类是UserActivity,但是没有办法做到这一点。

有解决方案吗?

2 个答案:

答案 0 :(得分:24)

如果将generateRandomKey()方法提取到一个单独的类中,则可以在测试中注入(手动或使用类似RoboGuice之类的)该类的受控版本,以便在Robolectric运行时生成的“随机”键实际上是一个已知的价值。但在生产代码中仍然是随机的。

然后,您可以捕获活动创建的意图,并测试“key”是否包含预期的测试值。


然而,直接回答你的问题......

当我测试是否生成了意图(在这种情况下是通过按钮点击)并且指向正确的目标时我使用

public static void assertButtonClickLaunchesActivity(Activity activity, Button btn, String targetActivityName) {
    btn.performClick();
    ShadowActivity shadowActivity = shadowOf(activity);
    Intent startedIntent = shadowActivity.getNextStartedActivity();
    ShadowIntent shadowIntent = shadowOf(startedIntent);
    assertThat(shadowIntent.getComponent().getClassName(), equalTo(targetActivityName));
}

答案 1 :(得分:1)

这样的东西?

Assert.assertTrue(UserActivity.class.equals(intent.getComponent().getClassName()));

或assertEquals?