我在我们的应用程序中开发了一些很酷的推送通知,并进行了一些测试,以便当用户点击其中一个通知时,应用程序启动正确的意图打开正确的活动。如何用Espresso测试由TaskStackBuilder生成的PendingIntent
在我们的应用程序中,我们有一个StartupActivity,它捕获所有这些推送通知并将其路由到正确的屏幕并显示正确的附加内容。 的UI测试,与Espresso
完成,覆盖了正确的推出看起来是这样的:
@Test
public void showsANotificationAndOpensTheCorrectScreen() throws
UiObjectNotFoundException {
sendBroadcast(PushNotificationBuilder
.withAction("com.xxxx.android.gcm.SOMETHING")
.withType("SOME_TYPE")
.withRelatedId(ANY_ID)
.withTitle(ANY_TITLE)
.build());
tapNotificationWithTitle(ANY_TITLE);
intended(allOf(
hasComponent(DesitinyActivity.class.getCanonicalName()),
hasExtra("extra_id", Long.valueOf(ANY_ID)),
hasExtra("extra_other_extra", true)));
}
正如你所看到的,这个测试模拟收到一个通知,它并检查挖掘如果打算到正确的活动是抛出。
当我们有一个不在第一级的屏幕时(例如典型的细节屏幕),我们需要构建一堆活动,问题就会到来。为此,我们使用TaskStackBuilder
来生成包含所有意向堆栈的PendingIntent。一个示例代码生成给定的最终活动的意图的堆栈:
private PendingIntent generateexampleTaskBuilder(Context context, Intent intentToTheFinalScreen) {
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(ExampleActivity.getLaunchIntent(someExtra, context));
stackBuilder.addNextIntent(intent);
return stackBuilder.getPendingIntent(PushIdIntegerGenerator.getUniquePushId(),
PendingIntent.FLAG_UPDATE_CURRENT);
}
的问题是,该浓咖啡intended
方法从未验证了该待定意图和测试从未通过。如果我改变了正常和直接意图的未决意图,测试通过。所以我们可以假设意图的方法()不能捕获未决的意图。
是否有任何形式来测试待处理的意图?
以防万一有人来这里寻找如何使用打算TaskStackBuilder存根。您需要通过堆栈层次结构存储所有活动意图。 – Milan