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

标签 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。

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

最佳答案

模拟本身的创建看起来是正确的,但您尚未展示完整的测试,特别是如何使用创建 spy 。

您需要检查两件事。

首先,您需要确保调用 extensionManager.registerPlugin(extension); 的代码使用了 spy ,即您创建的 emSpy 对象。这里的模拟仅发生在您创建的对象的实例上。如果您的测试下的代码创建了另一个您在测试中未替换的 extensionManager ,则该调用将不会被模拟,并且将调用真正的 registerPlugin

第二件事是,如果 registerPlugin 是私有(private)的或 ExtensionManager 类是最终的,则需要使用 @PrepareForTest(ExtensionManager.class)您的测试类,如 powermock documentation 中所述

关于java - 如果 Java 中的方法存在于外部 jar 中,如何模拟该方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51806687/

相关文章:

java - 模拟基于反射的调用

java - 如何在主应用程序中调用带有数组参数的函数?

java - 将 byte[] 转换为 String,然后再转换回 byte[]

java - 使用 Java 拆分 XML 文件

java - 在 Spark 中访问 Cassandra 节点

java - 命令行太长。缩短测试或 JUnit 默认配置的命令行?

perl - 我如何运行 Perl 测试并将结果与​​ Ant 中的 JUnit 报告合并?

java - 单元测试Java中单例类的线程安全性?

android - 单元测试 BroadcastReceiver

java - 模拟带参数的构造函数