如果外部jar中存在该方法,该如何在Java中模拟该方法?

时间:2018-08-12 07:28:53

标签: java junit mockito powermockito

我正在为内部调用以下方法的方法编写一个junit:

extensionManager.registerPlugin(extension);

在这里,extensionManager是外部jar类的对象。为此,我尝试了以下操作:

ExtensionManager em = new ExtensionManager();
ExtensionManager emSpy = spy(em);
PowerMockito.doNothing().when(emSpy, 
   "registerPlugin",Mockito.any());

注意:registerPlugin方法的返回类型为void。

但这对我不起作用。它正在调用真实方法。谁能帮帮我。

1 个答案:

答案 0 :(得分:1)

模拟本身的创建看起来是正确的,但是您没有显示完整的测试,尤其是如何使用create spy。

您需要检查两件事。

首先,您需要确保调用extensionManager.registerPlugin(extension);的代码使用间谍程序,即您创建的emSpy对象。此处的模拟仅针对您创建的对象的实例。如果测试中的代码创建了另一个extensionManager,而您在测试中未替换该代码,则该调用将不会被模拟,而实际的registerPlugin将被调用。

第二件事是,如果registerPlugin是私有的,或者ExtensionManager是最后的课程,则您需要按照powermock documentation

的说明在测试类上使用@PrepareForTest(ExtensionManager.class)