Dagger 2への最近の移行後、私が取り組んでいるアプリケーションでは、すべての機能に@ActivityScopeが使用されています。各アプリケーション機能はMVPパターンを使用して実装されており、アプリケーションライフサイクル全体で必要となる依存関係(アプリケーションによって提供される)のためにアプリケーションコンポーネントに依存する独自のローカルダガーコンポーネント設定を備えています。各機能のアクティビティは、ローカルダガーコンポーネントを設定する(ローカルコンポーネントを構築してローカルモジュールをインスタンス化する)ために、各アクティビティによってオーバーライドされるメソッドにメインアプリケーションコンポーネントを提供する基本クラスを拡張します。Dagger 2とカスタムスコープによるエスプレッソのテスト
私が解決しようとしている問題は、テスト対象のアクティビティにモックを注入する方法です。私が経験している主な問題は、実行時に元のローカルコンポーネントと対応するモジュールをモックされたコンポーネントと入れ替えることができないことです。私が読んだDagger 2のエスプレッソテストに関する記事はたくさんありますが、クリーンなアーキテクチャを推進しているわけではありません。ほとんどの場合、彼らはすべてのアクティビティを注入するためにAppComponentに依存しています。私の場合は、各フィーチャのコンポーネントがそれ自身のアクティビティをインジェクトする責任があります。
私が思いついた最善のアプローチは、テストセットアップの一部として初期化されるコンポーネントビルダーと、初期化されている場合はこのセットアップと一緒に行かなければならないアクティビティコードを導入することでした。しかし、私は生産とテストコードを混在させたくありません。ここ はダガーのセットアップを示した概略次のとおりです。 Dagger 2 Setup