Java の単体テストで、mockito を使う方法を書いていきます。mockito は、Java の単体テスト用モックフレームワークです。
モックは「モックオブジェクト(Wikipedia)」の略で、テストで用いられるスタブ(下位モジュールの代用品)の一種です。
手順1. モックの作成
JUnit のテストケースで、モックを作成するプログラムを書きました。また、モックのメソッドを実行してから、メソッドが実行されたことを検証しています。
gsjt/src/test/java/gsjt/MockitoVerifyTest.java
package gsjt; import static org.mockito.Mockito.*; import java.util.List; import org.junit.Test; @SuppressWarnings({"unchecked", "rawtypes"}) public class MockitoVerifyTest { @Test public void test() { // モックの作成。 List mockedList = mock(List.class); // モックのメソッドを実行。 mockedList.add("one"); // メソッドが実行されたか検証。 verify(mockedList).add("one"); // 実行されてないメソッドは検証エラー。 // verify(mockedList).add("two"); } }
手順2. モックメソッドの戻り値設定
mokito のモックは、when(メソッド).thenReturn(戻り値)
で、メソッドの戻り値を設定できるようです。
gsjt/src/test/java/gsjt/MockitoReturnTest.java
package gsjt; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import java.util.List; import org.junit.Test; @SuppressWarnings({"unchecked", "rawtypes"}) public class MockitoReturnTest { @Test public void test() { // モックの作成。 List mockedList = mock(List.class); // モックのメソッドを実行。 mockedList.add("one"); // モックに追加した "one" は取得できない。 assertThat(mockedList.get(0)).isNull(); // モックの戻り値を設定。 when(mockedList.get(0)).thenReturn("two"); // モックの戻り値を検証。 assertThat(mockedList.get(0)).isEqualTo("two"); } }
検証コード assertThat(...)
は、AssertJ の記事 に詳しく書いています。
手順3. クラスパスの設定
Gradle だと、ビルドファイルの dependencies に次の内容を追加します。
testCompile 'org.mockito:mockito-core:1.10.19'
テストを実行する場合、次の記事を参考にして頂ければ幸いです。
補足. 実クラスのモックについて
今回は List(インターフェイス)で試しましたが、ArrayList(実クラス)などのモックも作れました。mock(ArrayList.class)
と書けば大丈夫そうです。