Java中的静态恢复功能的PowerMockito verifyStatic()方法的问题

时间:2019-07-11 09:54:26

标签: java recursion static-methods powermockito

我是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

1 个答案:

答案 0 :(得分:0)

这里的问题是您正在从间谍/模拟对象的内部调用拦截的方法。从外部拨打电话时进行监听。因此,原始呼叫是“已注册”,而不是内部呼叫。

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