Что представляют собой тесты, использующие моки, и как они называются?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Это тесты, в которых реальные зависимости заменяются заглушками или мок-объектами. Они нужны, чтобы проверять логику изолированно, без сети, базы данных и других внешних систем. Обычно такие тесты относят к unit tests, если проверяется одна единица поведения.
Определение:
Тесты с моками — это тесты, где вместо реальных объектов используются подмены: mock, stub, fake, spy. Моки позволяют контролировать входные данные, поведение зависимостей и проверять, как код взаимодействует с ними. Такой подход помогает делать тесты быстрыми, стабильными и независимыми от внешней среды.
Пример использования:
Например, есть функция, которая отправляет уведомление через внешний сервис. В тесте не вызывают реальный API, а подставляют mock-объект и проверяют, что метод отправки был вызван с нужными параметрами.
from unittest.mock import Mock
def send_welcome(email_service, user_email):
email_service.send(user_email, "Welcome!")
def test_send_welcome():
email_service = Mock()
send_welcome(email_service, "user@example.com")
email_service.send.assert_called_once_with("user@example.com", "Welcome!")
Пояснение кода:
Код создаёт mock-объект email_service, который имитирует внешний сервис отправки писем. Затем функция send_welcome вызывается так же, как в обычном коде, но реальная отправка не происходит. После этого тест проверяет, что метод send был вызван ровно один раз и с нужными аргументами.
По шагам:
- Создаётся поддельная зависимость
Mock(). - Тестируемая функция вызывается с этой поддельной зависимостью.
- Проверяется факт и параметры вызова метода у мока.
- Логика тестируется без обращения к внешней системе.
Ключевые моменты:
- Такие тесты обычно называют unit tests, если они проверяют изолированную бизнес-логику.
- Mock — это подменный объект для проверки взаимодействий.
- Тесты с моками помогают убрать зависимость от сети, БД и других нестабильных сервисов.
- Важно не злоупотреблять моками: слишком много моков делает тесты хрупкими и менее понятными.
- Хороший тест с моками проверяет не реализацию, а ожидаемое поведение и взаимодействие с зависимостями.