Java / テスト / モック / Mockito

Java / テスト / モック / Mockito

モック伊藤である。

用途はモックオブジェクトを作って対象の private フィールドに値を突っ込むというもの

setup

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.2.4</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Sample

テスト対象はこの exec1 メソッド

public class MyProc {
    private MyConfig config = new MyConfig();
 
    public String exec1(String p1) {
        return this.config.getV1() + p1;
    }
}

exec1 の動作に private フィールドに設定されている config が影響しているが、 外部から触ることができないのでどうにかしたい。

public class MyConfig {
    public String getV1() {
        return "v1v1v1";
    }
}

なのでそのままなら結果が v1v1v1hogehoge みたいなのになる。

それをこのように記述する。

public class MyProcTest {
    // モック化したい対象を宣言してアノテーションをつける
    // モックなので実装が無くてよい
    // フィールド名はモック取替対象で使われているフィールド名に合わせる
    @Mock
    MyConfig config;
 
    // テスト対象を作成して、モック取替対象であることをアノテーションで示す
    @InjectMocks
    MyProc myProc1 = new MyProc();
 
    @Before
    public void init() {
        // テスト実行時に内部実装をモックへ取り替える
        MockitoAnnotations.initMocks(this);
    }
    @Test
    public void exec1Test() {
        // モックのメソッド実行結果を定義する
        when(config1.getV1()).thenReturn("testtesttest");
        System.out.println(myProc1.exec1("hogehoge"));  // testtesttesthogehoge
    }
}
java/test/mock/mockito/start.txt · 最終更新: 2021-01-15 19:19 by ore