Java中静态递归函数的PowerMockito verifyStatic()方法存在问题

Java中静态递归函数的PowerMockito verifyStatic()方法存在问题,java,recursion,static-methods,powermockito,Java,Recursion,Static Methods,Powermockito,我对Mockito和PowerMockito都是新手。我有一个测试方法,使用PowerMockito模拟静态递归方法。我需要验证特定的方法被调用了2次,但是测试用例失败了。而且实际的方法没有命中 这是代码 测试方法: public class Util { public static void methodToTest(String a, String b) { .............. methodToTest(c, d); } } 测试用例: p

我对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/Mock对象内部调用截获的方法。当从外部发出呼叫时进行拦截。所以原始调用是“注册”的,而不是内部调用


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

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


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

但这会导致堆栈溢出。。。至少这段代码看起来对你有帮助:但这会导致堆栈溢出。。。至少在这段代码看来,这可能会帮助您: