Mockito mockingDetails.getInvocations () вопрос - PullRequest
1 голос
/ 01 апреля 2020

То, что я пытаюсь сделать, это распечатать количество раз, когда определенный метод был вызван с использованием Mockito.

Когда я делаю следующее:

 int counter =
    Mockito.mockingDetails(myDependency)
        .getInvocations()
        .size();
System.out.println( counter );

, он печатает все методы, вызываемые на макете, однако я хочу распечатать счетчик только для одного указанного c метода, поэтому, если я попытаюсь,

 int counter =
    Mockito.mockingDetails(myDependency.doSomething())
        .getInvocations()
        .size();
System.out.println( counter );

, произойдет ошибка, сообщающая, что

Аргумент, переданный в Mockito.mockingDetails (), должен быть фиктивным, но нулевым!

Кто-нибудь знает, как решить эту проблему? Заранее спасибо!

1 Ответ

0 голосов
/ 05 апреля 2020

Вы можете играть с отражением:

MockingDetails mockingDetails = Mockito.mockingDetails(myDependency);

Method doSomethingMethod = mockingDetails.getMockHandler()
    .getMockSettings()
    .getTypeToMock()
    .getMethod("doSomething"); //here you can also pass the arguments of this method

long counter = mockingDetails.getInvocations()
    .stream()
    .filter(invocation -> invocation.getMethod().equals(doSomethingMethod))
    .count();

Обратите внимание, что для получения объекта класса Method мы не можем просто вызвать myDependency.getClass().getMethod("doSomething"), потому что в этом случае getClass() вернет Класс-оболочка Mockito, сгенерированный во время выполнения с собственными Method объектами. Так что equals в фильтре вернет false позже.

...