Бросаем checked Exceptions из mock объектов с Mockito
Быстрый ответ
Для эмуляции проверяемых исключений в Mockito, используя thenThrow
, выполните следующие действия:
MyClass myMock = Mockito.mock(MyClass.class);
Mockito.when(myMock.метод()).thenThrow(MyCheckedException.class);
myMock.метод(); // Здесь произойдёт выброс MyCheckedException
Замените MyCheckedException.class
на класс вашего исключения.
Убедитесь, что в сигнатуре метода указано выбрасываемое исключение.
Сигнатуры методов, немые стражи
Важно, чтобы сигнатура метода класса или интерфейса, который вы мокаете, соответствовала проверяемому исключению. Удостоверьтесь, что выбрасываемое исключение точно соответствует сигнатуре метода.
doAnswer() и willAnswer(), динамичный дуэт
Для управления запуском дополнительных действий в тестах используйте Mockito.doAnswer()
или BDDMockito.given().willAnswer()
. Эти методы помогут вам максимально точно контролировать выброс проверяемых исключений.
Контрольная точка: Правомочность исключения
При использовании Mockito.when().thenThrow()
или doAnswer()
обеспечьте, чтобы выбрасываемое исключение соответствовало контракту метода и не было отклонено библиотекой Mockito.
Выберите своего бойца: Непроверяемые исключения
Для увеличения гибкости можно использовать непроверяемые исключения, такие как RuntimeException
или ArrayIndexOutOfBoundsException
. Они способны обойти ограничения сигнатуры метода и гармонично работают в ваших тестах.
Основы Mockito
Синхронизируйте сигнатуру метода, который вы мокаете, с типом выбрасываемого проверяемого исключения. Это обеспечит безупречность ваших тестов и предотвратит появление ошибок при их выполнении.
BDD в Mockito, современная история
Если вы приверженец Поведенческо-ориентированной разработки (BDD), комбинирование BDDMockito.given()
и willAnswer()
позволит вам провести естественный диалог с вашими тестами и при этом точно эмулировать выброс проверяемых исключений.
Продвинутые методы
В сложных сценариях важно гарантировать безошибочное взаимодействие моков и алгоритма обработки исключений. Выясните, как именно ваш код реагирует на исключения, используя Mockito.verify()
.
Полезные материалы
- Mockito – mockito-core 5.10.0 javadoc — Официальная документация Mockito, которая станет вашим надёжным справочником.
- Эмуляция выброса исключений с помощью Mockito | Baeldung — Подход Baeldung к обработке исключений в Mockito, надёжный компас в мире моделирования поведения кода.
- Проверяемые и непроверяемые исключения в Java – GeeksforGeeks — Освойте отличия между проверяемыми и непроверяемыми исключениями в Java по материалам GeeksforGeeks.
- django – Mailchimp python wrapper gives error – no session – Stack Overflow — Обсуждение обработки исключений на форуме Stack Overflow, где можно найти полезные рекомендации.
- Урок: Исключения (Java™ Tutorials > Essential Java Classes) — Детальное изучение работы с исключениями по учебникам от Oracle.
- org.mockito.Mockito#when — Примеры использования метода
when()
, основного инструмента для тестирования в Mockito. - Разработка на Java с управлением тестами – Второе издание | Packt — Не заблудитесь в лабиринте вариантов использования Mockito с этой обширной справочной книгой.