Sobes.tech
Назад к вопросам
Junior — Middle
71

Используются ли моки или стабы в процессе тестирования 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 с тестовыми данными.

  1. Сначала подменяется реальный платежный сервис на тестовую заглушку.
  2. Заглушка возвращает заранее известный успешный ответ.
  3. API обрабатывает запрос как обычно, но без реального внешнего вызова.
  4. Тест проверяет итоговый HTTP-ответ.
  5. Если это мок, дополнительно можно проверить факт вызова метода и аргументы.

Ключевые моменты:

  • Моки и стабы применяют для изоляции компонентов и уменьшения зависимости тестов от внешних систем.
  • Стабы отвечают на вопрос «что вернется», моки — «как именно это было вызвано».
  • В API-тестах они полезны для внешних сервисов: платежей, почты, очередей, сторонних API.
  • Полная изоляция делает тесты быстрее, стабильнее и проще для отладки.
  • Для проверки интеграции реальных сервисов моки и стабы не заменяют интеграционные тесты, а дополняют их.