首页 > 解决方案 > 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

标签: javarecursionstatic-methodspowermockito

解决方案


这里的问题是您正在从间谍/模拟对象内部调用拦截的方法。当从外部进行呼叫时进行拦截。所以原始呼叫是“注册的”,而不是内部呼叫。

我不确定这是错误还是预期的行为,但我前段时间遇到过同样的问题(但不是静态问题),如果我记得我重新设计了测试。


推荐阅读