Проверка количества вызовов void метода в Java с Mockito

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы проверить количество вызовов void-метода при использовании Mockito, воспользуйтесь следующим кодом:

Java
Скопировать код
verify(mockObject, times(n)).voidMethodToCheck();

В данном коде mockObject – это мок-объект, n – предполагаемое число вызовов, voidMethodToCheck – это метод, количество вызовов которого исследуется.

Кинга Идем в IT: пошаговый план для смены профессии

Режимы проверки в Mockito

Проверка единственного вызова

Если ожидается, что данный метод вызывается только однажды:

Java
Скопировать код
verify(mockObject).voidMethodToCheck();
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Подтверждение отсутствия взаимодействия

Для проверки того, что метод не был вызван ни разу:

Java
Скопировать код
verify(mockObject, never()).voidMethodToCheck();

Проверка частоты вызовов

Можно проверить, вызывался ли метод не реже X и не чаще Y раз:

Java
Скопировать код
verify(mockObject, atLeast(x)).voidMethodToCheck();
verify(mockObject, atMost(y)).voidMethodToCheck();

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

Визуализация

Представьте подсчёт вызовов voidCall аналогично подсчету исполнений песни во время концерта:

Markdown
Скопировать код
| Песня            | Ожидаемое исполнение | Фактическое исполнение | 
| ---------------- | -------------------- | ---------------------- |
| Мелодия "voidCall"| 🎵🎵🎵 (3x)          | 🎵🎵🎵 (3x)            |

Для подсчёта Mockito воспользуется кодом:

Java
Скопировать код
verify(mockObject, times(3)).voidCall();

Если мелодия взвучит регулярно, 3 раза, публика будет довольна:

Markdown
Скопировать код
Ожидание концерта: 🎵🎵🎵
Фактический концерт: 🎵🎵🎵
Реакция зрителей:   👏👏👏 (Все довольны!)

Ожидание концерта: 🎵🎵🎵
Фактический концерт: 🎵🎵 ❌
Реакция зрителей:   👎👎👎 (Mockito сообщает об ошибке, зрителям это не по душе!)

Глубже в методы верификации

Проверка параметров

Знание числа вызовов функции иногда недостаточно, периодически важно проверить правильность передаваемых параметров:

Java
Скопировать код
verify(mockObject, times(n)).voidMethodToCheck("expectedParam");

Порядок вызовов

Для проверки правильной последовательности вызовов:

Java
Скопировать код
InOrder inOrder = inOrder(mockObject);
inOrder.verify(mockObject).firstMethod();
inOrder.verify(mockObject).voidMethodToCheck();

Сброс моков

Порой возникает необходимость сбросить состояние мока и начать все сначала:

Java
Скопировать код
reset(mockObject);

Однако, будьте аккуратны, это может приводить к удалению данных и созданию ненадежных тестов.

Сопоставление аргументов при верификации

По умолчанию Mockito сопоставляет точные аргументы. Для частичного сопоставления используйте ArgumentMatchers:

Java
Скопировать код
verify(mockObject, times(n)).voidMethodToCheck(anyString());

Полезные материалы

  1. GitHub – mockito/mockito: The most popular mocking framework for unit tests written in Java — последние публикации об обновлениях Mockito на GitHub.
  2. Mockito – mockito-core 5.10.0 javadoc — подробности об официальной документации метода verify() в Mockito.
  3. Юнит-тестирование с Mockito – УчебникДетализированное руководство по использованию Mockito с JUnit 5.
  4. DZone — статьи по юнит-тестированию с Mockito на Java: исследуйте в своем собственном темпе!
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какое выражение используется для проверки, что void-метод был вызван определённое количество раз?
1 / 5