Java проверяет вызов void методом n раз с Mockito

Я пытаюсь проверить, что внутри DAO вызывается метод (void). Я использую точку фиксации, которая отправляет список результатов до этой точки, сбрасывает список и продолжает.  Скажем, у меня есть 4 вещи в списке, и у меня есть точка фиксации 1, я ожидаю, что метод отправки будет вызываться 4 раза.  Я могу проверить, что метод вызван один раз, написав

Mockito.verify(mock).send()

он проходит, но я хочу проверить количество раз, когда он был вызван. Я бы подумал, что

Mockito.verify(mock.send(), times(4))

было бы достаточно, но он говорит, что параметры неверны для проверки.

Кстати, если я изменяю Mockito.verify(mock).send() на Mockito.verify(mock.send()) или Mockito.verify((mock).send()), я получаю ту же ошибку. Мысли об этом?

Ответ 1

Необходимым методом является Mockito # verify:

public static <T> T verify(T mock,
                           VerificationMode mode)

mock - это ваш смоделированный объект, а mode - это VerificationMode, описывающий, как следует проверять макет. Возможны следующие режимы::

verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
verify(mock, only()).someMethod("no other method has been called on the mock");

Вам понадобится статический импорт из класса Mockito, чтобы использовать метод verify и следующие режимы проверки:

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

Так что в вашем случае правильный синтаксис будет:

Mockito.verify(mock, times(4)).send()

Это подтверждает, что метод send был вызван 4 раза для осмеянного объекта. Он потерпит неудачу, если он был вызван менее или более 4 раз.


Если вы просто хотите проверить, был ли метод вызван один раз, вам не нужно передавать VerificationMode. Простой

verify(mock).someMethod("was called once");

будет достаточно. Он внутренне использует verify(mock, times(1)).someMethod("was called once");.


Можно выполнить несколько проверочных вызовов на одной и той же макете, чтобы добиться проверки "между". Mockito не поддерживает что-то подобное verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");, но мы можем написать

verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");

вместо этого, чтобы получить то же самое поведение. Границы включены, поэтому контрольный пример имеет зеленый цвет, когда метод вызывался 4, 5 или 6 раз.