Java 中静态递归函数的 PowerMockito verifyStatic() 方法问题
Issue with PowerMockito verifyStatic() method for a static recursive function in Java
我是 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
这里的问题是您从 spied/mocked 对象内部调用拦截方法。从外部进行呼叫时进行拦截。所以原始调用是 "registered" 而不是内部调用。
我不确定这是一个错误还是预期的行为,但我 运行 前段时间遇到过同样的问题(但不是静态问题),如果我记得我重新设计了测试。
我是 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
这里的问题是您从 spied/mocked 对象内部调用拦截方法。从外部进行呼叫时进行拦截。所以原始调用是 "registered" 而不是内部调用。
我不确定这是一个错误还是预期的行为,但我 运行 前段时间遇到过同样的问题(但不是静态问题),如果我记得我重新设计了测试。