2017-07-18 11 views
1

Dagger 2への最近の移行後、私が取り組んでいるアプリケーションでは、すべての機能に@ActivityScopeが使用されています。各アプリケーション機能はMVPパターンを使用して実装されており、アプリケーションライフサイクル全体で必要となる依存関係(アプリケーションによって提供される)のためにアプリケーションコンポーネントに依存する独自のローカルダガーコンポーネント設定を備えています。各機能のアクティビティは、ローカルダガーコンポーネントを設定する(ローカルコンポーネントを構築してローカルモジュールをインスタンス化する)ために、各アクティビティによってオーバーライドされるメソッドにメインアプリケーションコンポーネントを提供する基本クラスを拡張します。Dagger 2とカスタムスコープによるエスプレッソのテスト

私が解決しようとしている問題は、テスト対象のアクティビティにモックを注入する方法です。私が経験している主な問題は、実行時に元のローカルコンポーネントと対応するモジュールをモックされたコンポーネントと入れ替えることができないことです。私が読んだDagger 2のエスプレッソテストに関する記事はたくさんありますが、クリーンなアーキテクチャを推進しているわけではありません。ほとんどの場合、彼らはすべてのアクティビティを注入するためにAppComponentに依存しています。私の場合は、各フィーチャのコンポーネントがそれ自身のアクティビティをインジェクトする責任があります。

私が思いついた最善のアプローチは、テストセットアップの一部として初期化されるコンポーネントビルダーと、初期化されている場合はこのセットアップと一緒に行かなければならないアクティビティコードを導入することでした。しかし、私は生産とテストコードを混在させたくありません。ここ はダガーのセットアップを示した概略次のとおりです。 Dagger 2 Setup

答えて

1

here説明を含め、それぞれのアプリの機能のためのモックを提供するコンポーネント/モジュールを作成すると、私は最後に取ったアプローチは、カスタムAndroidJUnitRunnerを作成することでしたアプリケーションモジュールcheck Google doc for best practices。さらに、テスト中の各アクティビティは、モックを注入するためにオーバーライドする必要があります(モック依存の依存関係を注入するメソッドのみ)。

メインのアプリケーションマニフェストをきれいにするために、オーバーライドされたテストアクティビティはデバッグマニフェストで宣言されます。 このアプローチは、my Dagger 2 setupと似ている人がエスプレッソとダガー2でテストを行うのに役立ちます。

ロックンロールデー!

関連する問題