Web系開発メモ

Java, JavaScript, CSS, HTML などの記事を書いています。

Javaテスト:mockitoでモック作成

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) と書けば大丈夫そうです。

参考文献

INTRO - mockito