Mockitoを使った最終クラスとメソッドのモック

1概要

この短い記事では、Mockitoを使用して最終的なクラスとメソッドをモックする方法に焦点を当てます。

Mockitoフレームワークに焦点を当てた他の記事と同様に( Mockito Verify Mockito When/Then Mockitoのモックメソッド など)テストケースでは、以下に示す MyList クラスを共同編集者として使用します。

このチュートリアルに新しいメソッドを追加します。

public class MyList extends AbstractList {
    final public int finalMethod() {
        return 0;
    }
}

そして最後のサブクラスでも拡張します。

public final class FinalList extends MyList {

    @Override
    public int size() {
        return 1;
    }
}

2最終的なメソッドとクラス用にMockitoを設定する

Mockitoが最終的なクラスとメソッドをモックするために使われることができる前に、それは設定される必要があります。

プロジェクトの src/test/resources/mockito-extensions ディレクトリに org.mockito.plugins.MockMaker という名前のテキストファイルを追加し、1行のテキストを追加する必要があります。

mock-maker-inline

Mockitoはロード時に extensions ディレクトリで設定ファイルをチェックします。このファイルは最終的なメソッドとクラスのモックを可能にします。

[[”final-method”]]

3最終的な方法を模擬する

  • Mockitoが正しく設定されたら、他の方法と同様に最終的なメソッドをモックすることができます。

@Test
public void whenMockFinalMethodMockWorks() {

    MyList myList = new MyList();

    MyList mock = mock(MyList.class);
    when(mock.finalMethod()).thenReturn(1);

    assertNotEquals(mock.finalMethod(), myList.finalMethod());
}

MyList の具象インスタンスとモックインスタンスを作成することで、 finalMethod() の両方のバージョンによって返される値を比較して、モックが呼び出されることを確認できます。

[[”final-class”]]

4ファイナルクラスをモック

  • 最終クラスのモックは他のクラスのモックと同じくらい簡単です。

@Test
public void whenMockFinalClassMockWorks() {

    FinalList finalList = new FinalList();

    FinalList mock = mock(FinalList.class);
    when(mock.size()).thenReturn(2);

    assertNotEquals(mock.size(), finalList.size());
}

上記のテストと同様に、最後のクラスの具象インスタンスとモックインスタンスを作成し、メソッドをモックし、モックされたインスタンスの動作が異なることを確認します。

[[”conclusion”]]

5結論

このクイックチュートリアルでは、Mockitoエクステンションを使用してMockitoで最終クラスとメソッドをモックする方法を説明しました。

完全な例は、いつものようにhttps://github.com/eugenp/tutorials/tree/master/testing-modules/mockito[over on GitHub]にあります。