我在我們的應用程序中開發了一些很酷的推送通知,並進行了一些測試,以便當用戶點擊其中一個通知時,應用程序啓動正確的意圖打開正確的活動。如何用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