Моки (mock-объекты) - это «заглушки» для реальных зависимостей (API, БД, внешних сервисов и т. д.), которые мы подставляем в тестах. Они помогают:
- • Изолировать зону тестирования
Вместо реального сервера или базы данных вы работаете с контролируемым поведением мока. Логика вашего модуля тестируется без побочных эффектов.
- • Гарантировать детерминированность
С настоящими сервисами результаты могут меняться: данные правят другие процессы, сеть недоступна, таймауты срабатывают. Мок всегда возвращает предсказуемый ответ.
- • Ускорить прогон тестов
Обращение к мокам происходит мгновенно, без сетевых задержек и дорогостоящих операций I/O.
- • Покрыть сценарии ошибки
Легко имитировать ошибки сервиса (500, таймаут, некорректный формат ответа) и проверить, как ваш код на это отреагирует.
- • Снизить расходы на инфраструктуру
Нет нужды разворачивать тестовую среду с реальными микросервисами и базами - тестовые окружения проще и дешевле.
- • Точечно проверять граничные случаи
Вы задаёте мокам любые ответы и состояния, даже те, которые сложно воспроизвести в боевой системе.
Как правильно использовать моки?
- Не мокайте то, что вы не контролируете
Избегайте чрезмерного мокирования своего кода - лучше тестируйте реальные методы модуля.
- . Делайте моки простыми
- • Каждый мок должен отвечать только за одно поведение и быть легко читаемым.
- Проверяйте вызовы мока
- • Используйте assertions, чтобы убедиться, что ваш код действительно взаимодействует с зависимостью нужным образом (количество вызовов, переданные параметры).
- Не заменяйте интеграционные тесты моками
- • Моки отлично подходят для юнит-тестов, но периодически нужно прогонять тесты на реальных сервисах или в staging-окружении.
- Обновляйте моки при изменении контрактов
- • Если API внешнего сервиса изменилось, сразу скорректируйте мок, иначе тесты будут «проскальзывать» неверное поведение.
Используйте моки разумно - и ваши тесты станут надёжнее, быстрее и легче в поддержке!