Java 从Mockito切换到JMockit

Java 从Mockito切换到JMockit,java,unit-testing,junit,mockito,jmockit,Java,Unit Testing,Junit,Mockito,Jmockit,我以前一直依赖Mockito,直到今天我有了一个带有一些静态方法的最后一个类,所以我不得不切换到JMockit。我以前对它一无所知,所以问题是:如何将类似的逻辑从Mockito应用到JMockit public final class ServiceData extends BaseData { private List<Data> data; public ServiceData(List<Data> data) { this.da

我以前一直依赖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不能模拟最终类或静态方法(getContainer)
那么我如何在JMockit中编写相同的逻辑呢?谢谢。

以下是示例测试的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();结果=模拟容器相反。

通常当Mockito阻止某些东西时,它是设计气味的良好指示器。为什么
getDataAt
依赖父类的静态方法?首先,为什么要模拟
ServiceData
?很好。但本质上这不是一个真实的类,而是一个假的类,我只是为了这个问题特意写下的。这个类显然没有遵循一些设计规则。目的是了解如何迁移代码。:)谢谢我试试看。
@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
}