Проблема с методом PowerMockito verifyStatic () для статической рекурсивной функции в Java - PullRequest
0 голосов
/ 11 июля 2019

Я новичок в 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 голосов
/ 11 июля 2019

Проблема здесь в том, что вы вызываете перехваченный метод изнутри объекта шпиона / издевательства. Перехват производится, когда звонок сделан снаружи. Таким образом, оригинальный вызов «зарегистрирован», но не внутренний.

Я не уверен, что это ошибка или ожидаемое поведение, но я столкнулся с той же проблемой некоторое время назад (но не со статикой), и если я вспоминаю, я перепроектировал тест.

...