Вопрос проверяет понимание границ ответственности тестов и умение изолировать код от внешних нестабильных факторов.
Моки обязательны, когда тест должен быть быстрым, детерминированным и независимым от состояния внешнего сервиса. Sandbox может быть нестабильным, иметь ограничения или отличаться по поведению от продакшена. Также моки нужны для редких и аварийных сценариев. Поэтому sandbox используют ограниченно, а моки — в большинстве автоматических тестов.
Мок — это подмена реальной зависимости управляемой реализацией, которая возвращает заранее заданные ответы.
Даже при наличии sandbox у внешнего API есть ситуации, когда реальный вызов недопустим.
Перед перечислением важно отметить, что цель автотеста — стабильность и воспроизводимость, а не проверка стороннего сервиса.
Sandbox может:
периодически быть недоступным
работать медленно
менять данные без предупреждения
Это делает тесты flaky.
Через sandbox сложно или невозможно воспроизвести:
таймауты
5xx ошибки
неконсистентные данные
некорректные форматы ответа
С моками такие сценарии задаются явно.
Часто sandbox имеет:
rate limit
ограничения на количество запросов
общий доступ для всей команды
Моки снимают эти ограничения.
Если цель теста — проверить:
обработку статусов
ретраи
fallback-логику
внешний сервис должен быть исключён из уравнения.
Sandbox полезен:
для ручного тестирования
для контрактных тестов
для проверки соответствия API-документации
Моки обязательны, когда важны стабильность, скорость и контроль сценариев. Sandbox дополняет тестирование, но не заменяет моки в автоматических тестах.