public Data extraMethod(Data data) // interface Data
{
Data d = Singleton.getInstance().sort(data.get() , "desc");
//do something, logical
return d;
}
如何模拟对象Data(单例额外返回结果),类Singleton
具有静态方法getInstance
且没有公共构造函数。我想测试逻辑部分,测试extraMethod
而不进行数据排序操作。
答案 0 :(得分:0)
如果您要监视正在测试的类并创建一个将返回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
}