Android でステータス バー通知を送信するクラスがあります。通知が送信されたかどうかをテストする方法が見つからないため、有用な単体テストを作成するのが非常に困難です。
誰かがこれに対する解決策を持っていますか?
Android でステータス バー通知を送信するクラスがあります。通知が送信されたかどうかをテストする方法が見つからないため、有用な単体テストを作成するのが非常に困難です。
誰かがこれに対する解決策を持っていますか?
たぶんあなたが探している答えではないかもしれませんが、いつものように解決策は次のとおりです:
これは、次のテクノロジを使用して簡略化できます。
NotificationManagerを拡張して Mock オブジェクトを作成し、notify()
メソッドをオーバーライドしてみてください。オーバーライドされた関数はアサートできます。テスト ケースで、サブジェクト アクティビティにモックを挿入し、Android JUnit Test を使用してテストを実行します。
Robotiumは通知バーと対話できません。1つのアプリケーションに制限されています。robotiumのFAQを確認してください。これについての言及があります: http ://code.google.com/p/robotium/wiki/QuestionsAndAnswers
これはあなたが望むものだと思います。uiautomator。
Android4.1以降でのみ動作します。おそらく最初にサンプルコードを実行する必要があります。
プルダウンステータスバーアクションを実行するコードを記述してから、自分の作業を実行できます。これはUIテストのみです。uiautomatorでデータをテストすることはできません。
これがお役に立てば幸いです。
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 エンドポイントに送信した後にアクティブな通知があることを確認することです。
送信前に通知の詳細をデータストアに保存し、ユーザーが通知バーからアプリケーションに入るたびに確認済みとしてマークすることで、同様の状況を解決しました。robotium はアプリケーション境界に制限されているため、システム データにアクセスできないため、junit/jmockit ベースの単体テストを使用して動作をテストしました。
他の人の時間を節約するために、通知を検出するはずのように見えても検出しないものは、NO_CREATE フラグを使用して PendingIntent を作成しようとしています。
既存の通知と同じ値で NO_CREATE フラグを指定して PendingIntent を作成しようとすると、null が返されるはずなので、通知に既に含まれているかどうかがわかるように見えました。
残念ながら、これは信頼できるものではないようです。