我正在为内部调用以下方法的方法编写一个junit:
extensionManager.registerPlugin(extension);
在这里,extensionManager是外部jar类的对象。为此,我尝试了以下操作:
ExtensionManager em = new ExtensionManager();
ExtensionManager emSpy = spy(em);
PowerMockito.doNothing().when(emSpy,
"registerPlugin",Mockito.any());
注意:registerPlugin方法的返回类型为void。
但这对我不起作用。它正在调用真实方法。谁能帮我一下。
最佳答案
模拟本身的创建看起来正确,但是您没有显示完整的测试,尤其是如何使用create spy。
您需要检查两件事。
首先,您需要确保调用extensionManager.registerPlugin(extension);
的代码使用间谍,即您创建的emSpy
对象。此处的模拟仅针对您创建的对象的实例。如果您正在测试的代码创建了另一个您在测试中未替换的extensionManager
,则该调用将不会被模拟,而真正的registerPlugin
将被调用。
第二件事是,如果registerPlugin
是私有的或ExtensionManager
类是最终的,则需要按照powermock documentation中的说明在测试类上使用@PrepareForTest(ExtensionManager.class)