Применяете ли вы мок-объекты при написании автоматических тестов?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Да, мок-объекты применяются, когда нужно изолировать тестируемый код от внешних зависимостей: сети, базы данных, файловой системы, очередей или сторонних сервисов. Это помогает сделать тесты быстрее, стабильнее и предсказуемее. При этом важно не мокать всё подряд, чтобы не потерять смысл теста.
Определение:
Мок-объект — это подменный объект, который имитирует поведение реальной зависимости в тесте. Обычно он позволяет задать ожидаемые входные данные, вернуть нужный результат и проверить, что зависимость была вызвана правильно. В Python для этого часто используют unittest.mock.
Пример использования:
Допустим, есть функция, которая получает пользователя из внешнего API и сохраняет результат в систему. В тесте не хочется реально ходить в API, поэтому ответ API подменяют моком.
from unittest.mock import Mock
def get_user_name(api_client, user_id):
user = api_client.fetch_user(user_id)
return user["name"]
def test_get_user_name():
api_client = Mock()
api_client.fetch_user.return_value = {"name": "Alice"}
result = get_user_name(api_client, 42)
assert result == "Alice"
api_client.fetch_user.assert_called_once_with(42)
Пояснение кода:
Mock()создаёт поддельный объект вместо реального клиента API.return_valueзадаёт, что вернёт методfetch_userпри вызове.- Вызов
get_user_name(api_client, 42)работает с мок-объектом так, как будто это настоящий клиент. assert result == "Alice"проверяет логику функции.assert_called_once_with(42)проверяет, что зависимость была вызвана ровно один раз и с правильным аргументом.
Ключевые моменты:
- Моки полезны для изоляции кода от внешних систем.
- Они делают тесты быстрыми и детерминированными.
- Хорошо подходят для проверки вызовов, аргументов и сценариев ошибок.
- Не стоит мокать внутреннюю логику без необходимости — это делает тесты хрупкими.
- Для простых зависимостей иногда лучше использовать реальные объекты или заглушки, а не мок.