public Data extraMethod(Data data) // interface Data
{
Data d = Singleton.getInstance().sort(data.get() , "desc");
//do something, logical
return d;
}
如何模拟对象 Data(单例额外返回结果),类 Singleton
具有静态方法getInstance
并且没有公共构造函数。我想测试逻辑部分,测试没有数据排序操作的extraMethod
。
如果您监视被测试的类并创建一个将返回Singleton
的包级方法,则可以在没有 PowerMock 的情况下逃脱。您仍然需要设置调用 sort
方法时应发生的情况:
1) 被测等级
public Data extraMethod(Data data) // interface Data
{
Data d = getSingleton().sort(data.get() , "desc");
//do something, logical
return d;
}
Singleton getSingleton(){
return Singleton.getInstance();
}
2) 测试
@Spy
private MyClass myClassSpy = new MyClass();
@Mock
Singleton singletonStub;
@Mock
Data dataStub;
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
@Test
public void test() throws Exception{
// Arrange
doReturn(singletonStub).when(myClassSpy).getSingleton();
when(dataStub.get()).thenReturn(...);
when(singletonStub.sort(any(Data.class), "desc")).thenReturn(/* some data*/);
// Act and Assert
}