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