私は非常に結合したコードを持つチームプロジェクトに取り組んでいます。私はユニットテストのカバレッジを高めるためにしようとしていると私は次のシナリオに直面しました:Dagger2 + Mockito:ユニットの使い方このシナリオをテストしますか?
class Foo {
static void methodA() {
Bar b = new Bar();
b.getContent();
}
}
class Bar {
@Inject
DBAcessor mDBAcessor;
Bar() {
Dagger2.getInjector().inject(this);
}
public Object getContent() {
mDBAcessor.fetchData();
}
}
私はそれを渡さずにそれを行うことが可能である場合しかし、私は知らないが、ユニットテストmethodA()
にしたいDBAcessor
オブジェクトをコンストラクタ経由でBar()
クラスに追加します。 Bar
はプロジェクト全体で広く使用されているPOJOモデルでなければなりません。そのため、コンストラクタを変更して他の多くのクラスに影響を与えることをお勧めしますか?このシナリオにどのようにアプローチすればよいですか?
この部分で詳細を教えてください。 "Componentで宣言されたDagger2メソッドは、コンストラクタ(ActivityまたはFragment)にアクセスできないオブジェクトの内部でのみ使用されます。" –
Dagger2には「コンポーネント」という用語があります。たぶん 'Application'や' Activity'やカスタムのものかもしれません。スコープと考えてください。もしあなたが 'Component'の中に' inject'メソッドを宣言しなければ、コードで 'inject(this)'を使うことができないので、 'Dagger2'はあなたのオブジェクトをあなたが望むクラス('コンストラクタにアクセスできます)。 –
私は、高レベルのクラスから低レベルのクラスへの依存関係を引き続き渡す必要があることを理解しています。しかし、私がクラス 'Bar'でそれをやってみると、' static'メソッドしかないので 'Foo'クラスの' inject'をどこで呼び出すべきですか? –