テスト対象のインスタンスに
@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
と同じ。