エスプレッソテストの1つは、前のテストでトリガされたブロードキャストインテントが後続のテストで途中で届いているため、明らかに失敗しています。この時点で、アプリケーションは不整合な状態にあり、インテントハンドラによって予期される一部のSharedPreferences
がありません。インストルメンテーションテスト間のインテントをクリア
エスプレッソテストを開始する前に、すべての待機中のインテントが処理またはキャンセルされていることを確認する方法はありますか?
エスプレッソテストの1つは、前のテストでトリガされたブロードキャストインテントが後続のテストで途中で届いているため、明らかに失敗しています。この時点で、アプリケーションは不整合な状態にあり、インテントハンドラによって予期される一部のSharedPreferences
がありません。インストルメンテーションテスト間のインテントをクリア
エスプレッソテストを開始する前に、すべての待機中のインテントが処理またはキャンセルされていることを確認する方法はありますか?
私はすでにディスパッチされている意図を明確にする方法はないと思います。しかし、あなたは "以前のテスト"を調整することでこれを回避することができます。
エスプレッソを最大限に活用したい場合は、テストの範囲をできるだけ小さくする必要があります。したがって、インテントをブロードキャストし、次に何が起こるかを検証する代わりに、あなたの意図をスタブしてみてください。
利用IntentsTestRule
代わりのActivityTestRule
、以下のコード使用して、すべての内部の意図(時には外部のもの)をスタブアウト:右の意図が放送なっているかどうかを確認、あなたの「前のテスト」に今すぐ
intending(isInternal()).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null));
を以下のようなものを使用すること:
intended(hasComponent("com.example.something.SomeActivity"));
この方法で、あなたは実際にインテントをブロードキャストすることなく、あなたの機能をテストすることができます。私はいつも私の内的および外的意図を突き詰め、すべての私のテストで正しい意図が引き起こされているかどうかを確認します。このようにして、次の活動は開始されず、エスプレッソのテストはより速く安定しています。テストしたいものだけをテストし、スコープを本当に小さく保つようにしてください。
は続きを読む:https://google.github.io/android-testing-support-library/docs/espresso/intents/
おかげで、偉大な答えと私はより具体的にインテントをテストする場合、それは本当に便利になりますように見えます。私の場合、インテントはUI要素のクリックハンドラで実行されています。私はインテント自体をテストしようとはしていませんが、UIの更新をトリガーします。コードをよりよく分離できるかどうか考えてみましょう。 – Armand
この場合でも、私はあなたが意図をスタブすることをお勧めします。 「ブロードキャストインテント」が「クリックハンドラー」の副作用である場合、インテントをスタブしてUIの更新を確認することは安全です。あなたの 'broadcasted intent'がUI更新の原因となっている場合は、テストを2つに分割する必要があります。最初のテストケース:「クリックハンドラ」をクリックすると必要なインテントが発生したかどうかをテストします。 2番目のテストケース: 'broadcasted intent'でアクティビティを起動し、UIの更新を確認します。 – Henry