■ はじめに
https://dk521123.hatenablog.com/entry/2014/07/18/233904
の続き。 今回は、Javaのモック「Mockito」の構文について扱う
目次
【1】Mock オブジェクト作成用メソッド 1)Mockito.mock() 2)Mockito.spy() 【2】 検証用メソッド 1)Mockito.verify() 2)Mockito.when().thenXxxx() 3)Mockito.doXxxx()
【1】Mock オブジェクト作成用メソッド
1)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().thenXxxx()
* 戻り値ありのメソッドに振る舞いを設定 * 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());
参考文献
http://syagami.web.fc2.com/mockito.htm
http://snowsaber.dip.jp/java/mockito/base.html
関連記事
Mockito ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/07/18/233904