相互に通信するいくつかのサービスを持つアプリケーションがあります。これらはすべて 1 つのプロセスで動作するため、Messenger は必要ありません。アプリケーションの実行中、私のメイン サービスは他のサービスに接続し、サービスを依存関係として挿入します。たとえば、ImportService はいくつかの操作を実行するために ParserService を必要とするため、ImportService にはメソッド setParserService(ParserService service); があります。
実際の操作では問題なく動作しますが、 ServiceTestCase.bindService() は実際にテストするサービスを開始/バインドする方法しか知らないため、依存関係が必要なサービスのテストを実行できません。依存関係として必要な他のサービスを開始/バインドできません。他のサービスを取得しようとするとコンパイルされますが、bindService() を呼び出そうとするとクラッシュします。
私はたくさんグーグルで検索しましたが、今ではそれを解決する3つの方法しか見ることができません:
- アプリケーションをより原始的にします。サービスの代わりにクラスのみを使用します。
- 注射をしないこと。代わりに、サービス内の依存関係を取得してください。しかし、この方法では、サービス内のいくつかの場所で依存関係 (サービス) がバインドされるまで待つ必要があります。悪いコードになります。依存関係として複数のサービスが必要になる場合があるため、onServiceConnected() を使用できません。
- テストを使用しないでください:-)
簡単に言うと、質問は次のとおりです。ServiceTestCase を使用して、テストで 1 つの特定のサービスをバインドできます。しかし、1 つのテストで 2 つ、10、またはそれ以上のサービスをバインドするにはどうすればよいでしょうか?