【1】 Mock オブジェクト作成用メソッド
(1) Mock オブジェクト作成 : Mockito.mock()
* Mock オブジェクトを作成する
例
// ex1 ListのMock オブジェクトを作成
List mock = Mockito.mock(List.class);
// ex2 SampleClass01(下記のサンプル参照)のMock オブジェクトを作成
SampleClass01 sampleClass01 = Mockito.mock(SampleClass01.class);
(2) 一部だけモック化したオブジェクト作成 : Mockito.spy()
* 一部だけモック化したオブジェクトを作成する
例
// 本物メソッドを呼ぶ必要があるから、本物インスタンスを渡す
SampleClass01 sampleClass01 = Mockito.spy(new SampleClass01());
// Mockメソッド
Mockito.when(sampleClass01.getValue()).thenReturn("Fixed value");
assertEquals("Fixed value", sampleClass01.getValue());
// 本物のメソッドの動作
assertEquals("Hellow World, Mike!", sampleClass01.getValue("Mike"));
【2】 検証用メソッド
(1) メソッド呼び出しの妥当性検証 : Mockito.verify()
* モック化したメソッドが「呼ばれたか?」等をチェックする機能
例
// ex1 add() メソッドが引数 "To confirm calling add method" として呼び出されたかどうかを検証
Mockito.verify(mock).add("To confirm calling add method");
// ex2 SampleClass01(下記の関連記事の入門編のサンプル参照)のgetValue()メソッドが少なくとも1回呼び出されたかどうかを検証
Mockito.verify(sampleClass01, Mockito.atLeast(1)).getValue();
// ex3 getValue()メソッドが「最後の1回」「少なくとも2回」「多くとも4回」呼び出されたかどうかを検証
Mockito.verify(sampleClass01, atLeastOnce()).getValue();
Mockito.verify(sampleClass01, atLeast(2)).getValue();
Mockito.verify(sampleClass01, atMost(4)).getValue();
// ex4 add("Xxx")メソッドが「2回呼び出された」「0回(呼び出されていない)」「呼び出されていない」かどうかを検証
Mockito.verify(mock, Mockito.times(2)).add("Xxx");
Mockito.verify(mock, Mockito.times(0)).add("Xxx");
Mockito.verify(mock, Mockito.never()).add("Xxx");
(2) 戻り値ありのメソッドに振る舞いを設定 : Mockito.when()
* Mockito.when().thenReturn() : メソッドの戻り値を設定する
* Mockito.when().thenThrow() : 例外投げるように設定する
例
// ex1 get(0) メソッドが呼び出されたら "001" を返す
Mockito.when(mock.get(0)).thenReturn("001");
// ex2 SampleClass01のgetValue()メソッドが呼び出されたら "Fixed value" を返す
Mockito.when(sampleClass01.getValue()).thenReturn("Fixed value");
// ex3 get() メソッドにどんな引数でも呼び出されたら RuntimeException を投げる
Mockito.when(mock.get(Mockito.anyInt())).thenThrow(new RuntimeException());
(3) 戻り値なしのメソッドに振る舞いを設定 : Mockito.doXxxx()
* Mockito.doCallRealMethod() : 本物メソッドを呼ぶ
* Mockito.doNothing() : 戻り値なしメソッドに何もなかったことにしたい時に使う
* Mockito.doThrow() : 例外投げるように設定する
例
// ex1
Mockito.doCallRealMethod().when(sampleClass01).setAge(18)
// ex2
Mockito.doNothing().when(httpSession).invalidate();
// ex3
Mockito.doThrow(new RuntimeException()).when(sampleClass01).setAge(Mockito.anyInt());