java - Java中静态递归函数的PowerMockito verifyStatic()方法的问题
问题描述
我是 Mockito 和 PowerMockito 的新手。我有一个测试方法,我使用 PowerMockito 来模拟静态递归方法。我需要验证特定方法被调用了 2 次,但是测试用例失败了。实际方法也没有命中。
这是代码。
测试方法:
public class Util {
public static void methodToTest(String a, String b) {
..............
methodToTest(c, d);
}
}
测试用例 :
public void testMethodToTest() {
PowerMockito.mockStatic(Util.class);
Util.methodToTest(e, f);
verifyStatic(Util.class, Mockito.times(2));
Util.methodToTest(Matchers.anyString(), Matchers.anyString());
}
但是当我运行测试它失败并出现以下错误。
Wanted 2 times but was 1 time.
at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:182)
at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:164)
at org.powermock.core.MockGateway.methodCall(MockGateway.java:141)
理想情况下,使用Util.methodToTest(e, f)调用,它应该调用实际的methodToTest两次。
我调试了代码,然后我注意到 Util.methodToTest(e, f) 调用没有进入实际方法。
这段代码有什么问题?如何验证此递归方法是否被调用了两次?
Powermock 版本 - 1.7.4
解决方案
这里的问题是您正在从间谍/模拟对象内部调用拦截的方法。当从外部进行呼叫时进行拦截。所以原始呼叫是“注册的”,而不是内部呼叫。
我不确定这是错误还是预期的行为,但我前段时间遇到过同样的问题(但不是静态问题),如果我记得我重新设计了测试。
推荐阅读
- java - 使用 ExtentReport 获取空指针异常
- android - AsyncTask 作为 kotlin 协程
- node.js - svgo 形状到路径不转换椭圆
- javascript - 来自(NodeJS + Express)服务器的 AJAX 请求 png/jpeg 图像并以 html 显示
- google-cloud-platform - 无法确定操作系统登录 IAM 权限
- c# - 如何以另一种形式使用标签中的 user_id
- r - 带有百分比标签的堆积条形图
- json - Python:如何删除获取的 json 数据中不必要的字符
- javascript - 如果默认选中,jQuery 会不断获取错误单选按钮的值
- frameworks - 跨平台的最佳桌面应用程序框架