私はアプリでいくつかのクールなプッシュ通知を開発しています。ユーザーが通知の1つをクリックした後、正しいインテントを起動するとアクティビティ。Espressoでテストする方法TaskStackBuilderによって生成されたPendingIntent
私たちのアプリケーションでは、StartupActivityがあり、このプッシュ通知をすべてキャプチャして、適切な追加画面で正しい画面にルーティングします。 正しい打ち上げをカバーEspresso
で行われたUIテストは、次のようになります。
@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