使用PowerMockito用void方法模拟singleton类



我继续在UT上获得WanterButNotInvoked异常,代码如下:

@RunWith( PowerMockRunner.class )
@PrepareForTest( { CounterHandler.class, 
TrHandlerProtocolsCounterHandler.class, IProtocolCounterHandler.class } )
@Test
public void testInitialize() 
{
    IProtocolCounterHandler counter = new TrHandlerProtocolsCounterHandler();
    CounterHandler mockCounter = PowerMockito.spy( CounterHandler.getInstance() );
    PowerMockito.doNothing().when( mockCounter ).initialize();
    counter.initialize();
    Mockito.verify( mockCounter ).initialize();

}==========================
CounterHandler类

public void initialize() {
    //do something
}

==========================
TrHandlerProtocolsCounterHandler类

@Override
public void initialize()  {
    CounterHandler.getInstance().initialize();
}


我已经调试了Counterhandler.getInstance.initialize的执行,但当我试图验证它时,它说没有与mock交互。谢谢

这里的问题是您创建了CounterHandler的新实例,它是singleton实例的间谍。但是,您没有用这个spy替换CounterHandler类的singleton实例帮助。因此,当您的类调用getInstance时,它会得到实际的实例,而不是间谍。

您需要做的是模拟构造函数调用,使singleton实例成为mock。阅读这篇文章,它展示了如何做到这一点,并提供了使用Singleton的替代方案的讨论。

使用EasyMock和PowerMock 模拟单例

相关内容

  • 没有找到相关文章

最新更新