34

Android でステータス バー通知を送信するクラスがあります。通知が送信されたかどうかをテストする方法が見つからないため、有用な単体テストを作成するのが非常に困難です。

誰かがこれに対する解決策を持っていますか?

4

8 に答える 8

6

たぶんあなたが探している答えではないかもしれませんが、いつものように解決策は次のとおりです:

  • 通知機能を抽象化するインターフェースを作成します。
  • システム通知APIに委任するデフォルトの実装を作成します。
  • テストを実行するときは、デフォルトの実装をテストをサポートするモック実装に置き換えます(または装飾します)。

これは、次のテクノロジを使用して簡略化できます。

  • 実装の選択を合理化するための依存性注入フレームワーク(RoboGuiceなど)。
  • モック実装の作成を自動化するためのモックライブラリ(EasyMockなど)。
于 2012-01-09T06:10:41.687 に答える
4

NotificationManagerを拡張して Mock オブジェクトを作成し、notify()メソッドをオーバーライドしてみてください。オーバーライドされた関数はアサートできます。テスト ケースで、サブジェクト アクティビティにモックを挿入し、Android JUnit Test を使用してテストを実行します。

于 2012-04-01T19:18:28.680 に答える
2

Robotiumは通知バーと対話できません。1つのアプリケーションに制限されています。robotiumのFAQを確認してください。これについての言及があります: http ://code.google.com/p/robotium/wiki/QuestionsAndAnswers

于 2011-04-06T21:48:44.807 に答える
2

UIテスト

これはあなたが望むものだと思います。uiautomator。

Android4.1以降でのみ動作します。おそらく最初にサンプルコードを実行する必要があります。

プルダウンステータスバーアクションを実行するコードを記述してから、自分の作業を実行できます。これはUIテストのみです。uiautomatorでデータをテストすることはできません。

これがお役に立てば幸いです。

于 2013-01-05T07:20:54.360 に答える
2

Android Marshmallow (api 23) では、これらの種類のテストのためだけにエミュレーターを使用できます。

例えば:

 public void testCheckNotification_2() throws IOException, InterruptedException, GcmException
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        GcmResponse gcmResponse = endPointImp.sendGcmMulticastRequestImp(getGcmMultiRequest());
        assertThat(gcmResponse.getSuccess(), is(1));
        Thread.sleep(2000);
        assertThat(mManager.getActiveNotifications().length, is(1));
        StatusBarNotification barNotification = mManager.getActiveNotifications()[0];
        assertThat(barNotification.getId(), is(INCIDENCIA.getTitleRsc()));

        // We check the pending intent.
        PendingIntent pendingIntent = barNotification.getNotification().contentIntent;
        assertThat(pendingIntent.getCreatorPackage(), is(GcmRequest.PACKAGE_DIDEKINDROID));
    }
}

重要な部分は、NotificationManager (mManager) を呼び出して、マルチキャスト メッセージを Google FCM http エンドポイントに送信した後にアクティブな通知があることを確認することです。

于 2016-06-08T15:55:24.570 に答える
1

送信前に通知の詳細をデータストアに保存し、ユーザーが通知バーからアプリケーションに入るたびに確認済みとしてマークすることで、同様の状況を解決しました。robotium はアプリケーション境界に制限されているため、システム データにアクセスできないため、junit/jmockit ベースの単体テストを使用して動作をテストしました。

于 2012-02-08T12:55:12.133 に答える
-1

他の人の時間を節約するために、通知を検出するはずのように見えても検出しないものは、NO_CREATE フラグを使用して PendingIntent を作成しようとしています。

既存の通知と同じ値で NO_CREATE フラグを指定して PendingIntent を作成しようとすると、null が返されるはずなので、通知に既に含まれているかどうかがわかるように見えました。

残念ながら、これは信頼できるものではないようです。

于 2013-12-12T09:22:01.220 に答える