テスト対象のインスタンスに @InjectMocksをつけると、対象インスタンスのフィルドに@Mockされたインスタンスを差し込むことができる。
1 |
|
実現方法
InjectMocksのJavadocを読むと、フィルドのinject方法は3つあります。
Constructor injection;
1つ目はコンストラクターを利用してモックインスタンスを設定する。この方法はデフォルトで引数の数が一番多いコンストラクターを利用する。
要注意なことは、必要なモックインスタンスが見つからない場合、その引数はnullとなる。
引数にモックできないタイプ(基本型)がある場合、デフォルトのコンストラクターでInjectMocksのインスタンスを作って別の方法でInjectを実現する。Property setter injection;
2つ目はとてもわかりやすくて、フィルドのsetterメソッドを利用して、モックインスタンスを差し込む。
該当のsetterメソッドを探すとき、まずフィルドのタイプを利用する。同じタイプのフィルドが存在する場合、モックインスタンスの名前を利用する。
という理由で、モックインスタンスを定義するとき、できる限りInject対象のフィルドと同じ名前にする方がいい。Constructor Injectionでデフォルトコンストラクターを利用する場合、モックインスタンスの差し込むはこの方法で実現される。Field injection;
フィルドのsetterがない場合、直接設定でInjectを実現する。ルールはProperty setter injectionと同じ。

