Используются ли моки или стабы в процессе тестирования API для изоляции компонентов?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Да, моки и стабы часто используют, когда нужно изолировать тестируемый API от внешних зависимостей. Это позволяет проверять логику сервиса без реальных запросов к другим системам, БД или платежным шлюзам. Важно понимать разницу: стабы дают предсказуемые ответы, моки дополнительно позволяют проверять, как именно компонент был вызван.
Определение:
Стабы и моки — это тестовые замены реальных зависимостей.
- Stub возвращает заранее заданные данные и помогает контролировать вход для тестируемого компонента.
- Mock не только возвращает данные, но и позволяет проверять взаимодействие: был ли вызов, с какими параметрами и сколько раз.
В API-тестировании их используют не для самого HTTP-уровня как такового, а для изоляции внутренних зависимостей сервиса, который обрабатывает запрос.
Пример использования:
Допустим, API POST /orders создает заказ и обращается к сервису оплаты. В тесте платежный сервис можно заменить стабом, чтобы не отправлять реальные платежи.
def test_create_order(client, payment_service_stub):
payment_service_stub.charge.return_value = {"status": "success"}
response = client.post("/orders", json={
"product_id": 10,
"amount": 100
})
assert response.status_code == 201
assert response.json()["status"] == "created"
Если нужно проверить, что сервис оплаты был вызван ровно один раз с нужными параметрами, используют мок.
Пояснение кода:
В примере тест вызывает API POST /orders с тестовыми данными.
- Сначала подменяется реальный платежный сервис на тестовую заглушку.
- Заглушка возвращает заранее известный успешный ответ.
- API обрабатывает запрос как обычно, но без реального внешнего вызова.
- Тест проверяет итоговый HTTP-ответ.
- Если это мок, дополнительно можно проверить факт вызова метода и аргументы.
Ключевые моменты:
- Моки и стабы применяют для изоляции компонентов и уменьшения зависимости тестов от внешних систем.
- Стабы отвечают на вопрос «что вернется», моки — «как именно это было вызвано».
- В API-тестах они полезны для внешних сервисов: платежей, почты, очередей, сторонних API.
- Полная изоляция делает тесты быстрее, стабильнее и проще для отладки.
- Для проверки интеграции реальных сервисов моки и стабы не заменяют интеграционные тесты, а дополняют их.