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

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

1. 概要

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

Mockitoフレームワークに焦点を当てた他の記事(Mockito VerifyMockito When/ThenMockito’s Mock Methodsなど)と同様に、テストケースの共同編集者として以下に示すMyListクラスを使用します。

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

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

また、finalサブクラスで拡張します。

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ディレクトリで構成ファイルをチェックします。 このファイルにより、最終メソッドとクラスのモックが可能になります。

3. 最終的な方法をモックする

Once Mockito is properly configured, a final method can be mocked like any other

@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()から返される値を比較し、モックが呼び出されていることを確認できます。

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

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

@Test
public void whenMockFinalClassMockWorks() {

    FinalList finalList = new FinalList();

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

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

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

5. 結論

このクイックチュートリアルでは、Mockito拡張機能を使用して、Mockitoで最終クラスとメソッドをモックする方法について説明しました。

いつものように、完全な例はover on GitHubにあります。