如何使用robolectric来testing开始的意图与额外的数据

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

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

testing它是这样的:

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

这是失败的,因为我的testing代码中的intent没有额外的数据key

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

有解决scheme吗?

Solutions Collecting From Web of "如何使用robolectric来testing开始的意图与额外的数据"

如果你将generateRandomKey()方法提取到一个单独的类中,然后你可以向你的testing中注入一个该类的受控版本(手工或使用类似RoboGuice的东西),这样Robolectric运行时产生的“随机”键实际上是一个已知值。 但在生产代码中仍然是随机的。

然后,您可以捕捉您的活动创build的意图,并testing“关键”是否包含预期的testing值。


但是,直接回答你的问题…

当我testing一个意图是否生成(在这种情况下通过一个button单击),并指向我使用的正确的目标

 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)); } 

像这样的东西?

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

或assertEquals?