PowerMock - Singleton实例测试

时间:2017-10-30 08:26:55

标签: java junit mockito powermock powermockito

public Data extraMethod(Data data) // interface Data
{
    Data d = Singleton.getInstance().sort(data.get() , "desc");
    //do something, logical
    return d;
}

如何模拟对象Data(单例额外返回结果),类Singleton具有静态方法getInstance且没有公共构造函数。我想测试逻辑部分,测试extraMethod而不进行数据排序操作。

1 个答案:

答案 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        
}