4

私は今日までMockitoに頼っていましたが、いくつかの静的メソッドを持つ最終クラスがあるので、JMockitに切り替えました。以前はそれについて何も知らなかったので、質問は次のとおりです。Mockito から JMockit に同様のロジックを適用するにはどうすればよいですか?

public final class ServiceData extends BaseData {

    private List<Data> data;

    public ServiceData(List<Data> data) {
         this.data = data;
         // something else
    }

    public static Container getContainer() {
         return super.getContainer();
    }

    public Data getDataAt(Index index) {
         return super.getContainer().get(index);
    }

}

Mockito で記述されたテストは次のようになります。

@Test
public void test() {
    ServiceData mockServiceData = mock(ServiceData.class);
    Data mockData = mock(Data.class);
    // only stubbing some of the methods
    Container mockContainer = spy(Container.class);
    doReturn(something).when(mockContainer.someMethod());
    when(mockServiceData.getContainer()).thenReturn(mockContainer);
    when(mockServiceData.getDataAt(any(Index.class)).thenReturn(mockData);

    // some assertions
}

Mockito は最終クラスや静的メソッド (getContainer) をモックできないため、これは機能しません。では、JMockit で同じロジックをどのように記述できますか? ありがとう。

4

1 に答える 1

5

以下は、サンプル テストに相当する JMockit です。

@Test
public void test(
    @Mocked final ServiceData mockServiceData, @Mocked final Data mockData,
    @Mocked final Container mockContainer)
{
    // only stubbing some of the methods
    new Expectations(mockContainer) {{
        mockContainer.someMethod(); result = "something";
        mockServiceData.getContainer(); result = mockContainer;
        mockServiceData.getDataAt((Index) any); result = mockData;
    }};

    // some assertions
}

メソッドをモックstaticするための構文は同じですが、ServiceData.getContainer(); result = mockContainer;代わりに書く必要があります。

于 2013-10-16T11:31:25.590 に答える