Проверка количества вызовов void метода в Java с Mockito
Быстрый ответ
Чтобы проверить количество вызовов void-метода при использовании Mockito, воспользуйтесь следующим кодом:
verify(mockObject, times(n)).voidMethodToCheck();
В данном коде mockObject
– это мок-объект, n
– предполагаемое число вызовов, voidMethodToCheck
– это метод, количество вызовов которого исследуется.
Режимы проверки в Mockito
Проверка единственного вызова
Если ожидается, что данный метод вызывается только однажды:
verify(mockObject).voidMethodToCheck();
Подтверждение отсутствия взаимодействия
Для проверки того, что метод не был вызван ни разу:
verify(mockObject, never()).voidMethodToCheck();
Проверка частоты вызовов
Можно проверить, вызывался ли метод не реже X и не чаще Y раз:
verify(mockObject, atLeast(x)).voidMethodToCheck();
verify(mockObject, atMost(y)).voidMethodToCheck();
Это позволяет оценивать разрешенные интервалы вызовов функции, без необходимости знать их точное число.
Визуализация
Представьте подсчёт вызовов voidCall
аналогично подсчету исполнений песни во время концерта:
| Песня | Ожидаемое исполнение | Фактическое исполнение |
| ---------------- | -------------------- | ---------------------- |
| Мелодия "voidCall"| 🎵🎵🎵 (3x) | 🎵🎵🎵 (3x) |
Для подсчёта Mockito воспользуется кодом:
verify(mockObject, times(3)).voidCall();
Если мелодия взвучит регулярно, 3 раза, публика будет довольна:
Ожидание концерта: 🎵🎵🎵
Фактический концерт: 🎵🎵🎵
Реакция зрителей: 👏👏👏 (Все довольны!)
Ожидание концерта: 🎵🎵🎵
Фактический концерт: 🎵🎵 ❌
Реакция зрителей: 👎👎👎 (Mockito сообщает об ошибке, зрителям это не по душе!)
Глубже в методы верификации
Проверка параметров
Знание числа вызовов функции иногда недостаточно, периодически важно проверить правильность передаваемых параметров:
verify(mockObject, times(n)).voidMethodToCheck("expectedParam");
Порядок вызовов
Для проверки правильной последовательности вызовов:
InOrder inOrder = inOrder(mockObject);
inOrder.verify(mockObject).firstMethod();
inOrder.verify(mockObject).voidMethodToCheck();
Сброс моков
Порой возникает необходимость сбросить состояние мока и начать все сначала:
reset(mockObject);
Однако, будьте аккуратны, это может приводить к удалению данных и созданию ненадежных тестов.
Сопоставление аргументов при верификации
По умолчанию Mockito сопоставляет точные аргументы. Для частичного сопоставления используйте ArgumentMatchers:
verify(mockObject, times(n)).voidMethodToCheck(anyString());
Полезные материалы
- GitHub – mockito/mockito: The most popular mocking framework for unit tests written in Java — последние публикации об обновлениях Mockito на GitHub.
- Mockito – mockito-core 5.10.0 javadoc — подробности об официальной документации метода
verify()
в Mockito. - Юнит-тестирование с Mockito – Учебник — Детализированное руководство по использованию Mockito с JUnit 5.
- DZone — статьи по юнит-тестированию с Mockito на Java: исследуйте в своем собственном темпе!