Ответ
Заглушка (Mock/Stub) — это тестовый двойник (test double), который заменяет реальную зависимость в изолируемом модуле. Она используется для контроля входных данных и поведения зависимостей.
Основные цели:
- Изоляция тестируемого модуля от внешних систем (БД, API, файловая система).
- Эмуляция специфического поведения (возврат успешного ответа, ошибки, исключений).
- Ускорение выполнения тестов за счёт исключения медленных операций.
- Проверка взаимодействий (был ли метод вызван с нужными аргументами).
Пример использования unittest.mock в Python:
from unittest.mock import Mock
# 1. Создание заглушки для внешнего сервиса
payment_gateway_mock = Mock()
# 2. Настройка поведения: возврат успешного ответа
payment_gateway_mock.process_payment.return_value = {"status": "success", "transaction_id": "txn_123"}
# 3. Настройка поведения: эмуляция ошибки
payment_gateway_mock.process_payment.side_effect = ConnectionError("Service unavailable")
# 4. Использование заглушки в тесте
def test_successful_payment():
order_service = OrderService(payment_gateway_mock)
result = order_service.checkout(amount=100.0)
# Проверка результата
assert result.is_successful == True
# Проверка взаимодействия: метод был вызван ровно 1 раз с нужным аргументом
payment_gateway_mock.process_payment.assert_called_once_with(amount=100.0)
Использование заглушек делает тесты быстрыми, стабильными и сфокусированными на логике тестируемого кода.