21

在一个活动中,我用一些随机的额外数据开始了一个新的 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,但没有办法做到这一点。

有解决办法吗?

4

2 回答 2

30

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

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


但是,要直接回答您的问题...

当我测试是否生成了意图(在本例中是通过单击按钮)并指向我使用的正确目标时

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));
}
于 2012-09-26T15:56:25.393 回答
1

像这样的东西?

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

或assertEquals?

于 2012-09-20T09:10:18.507 回答