4

私はアプリでいくつかのクールなプッシュ通知を開発しています。ユーザーが通知の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エスプレッソ方法は決してこの保留意思を確認せず、テストに合格しないことです。通常の直接インテントの保留中のインテントを変更した場合は、テストに合格します。したがって、意図したメソッド()が保留中のインテントをキャプチャできないと仮定できます。

保留中のインテントをテストするフォームはありますか?

+1

誰かがここに来て、TaskStackBuilderを意図してスタブする方法を探していたのです。スタック階層を介してすべてのアクティビティインテントをスタブする必要があります。 – Milan

答えて

4

エスプレッソインテントは、気密試験のソリューションです。インテントを介して他のアプリと通信するとき、エスプレッソでテストすることができます。

アプリの境界内にいるので、各ナビゲーションステップで正しい画面が表示されていることを確認して、UIをテストすることを検討してください。画面から画面へ行く方法は実装の詳細です。 [通知]> [タイトルの確認]> [戻る]> [リストの確認]が表示されます。

関連する問題