PowerMock - Singleton Instance test


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        
}

相关内容

  • 没有找到相关文章

最新更新