我继续使用以下代码获取我的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的交互。谢谢!
答案 0 :(得分:5)
这里的问题是你创建了一个CounterHandler
的新实例,它是单例实例的间谍。但是,您没有采用此间谍替换CounterHandler
类的单例实例帮助。因此,当您的班级调用getInstance
时,它会获得实际的实例,而不是间谍。
您需要做的是模拟构造函数调用,以便单例实例是模拟。阅读本文,其中介绍了如何执行此操作,并讨论了使用Singleton的替代方法。