我曾经依赖于Mockito,但今天遇到一个包含一些静态方法的final类,所以我不得不转向JMockit。在此之前,我对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无法mock final类或静态方法(getContainer),所以这不起作用。那么我该如何在JMockit中编写相同的逻辑呢?谢谢。
getDataAt
依赖于父类的静态方法?你为什么要首先尝试模拟ServiceData
? - Thorn G