Используют ли для интеграции сервисов моки или разворачивают все сервисы полностью
Что проверяют
Понимаете ли вы, что это не выбор одного из двух, а разные уровни тестирования со своей ценой. Следом обычно спрашивают, как вы следите, чтобы моки не разошлись с настоящим сервисом, и как проверить поведение при недоступности соседа.
Как отвечать
Нормальный ответ: используют оба подхода, на разных уровнях.
- заглушки внешних сервисов: WireMock, MockServer или Mountebank поднимают HTTP-заглушку с заданными ответами. Тесты быстрые и стабильные, и только так удобно проверить таймаут, ответ 500, медленный ответ или битый JSON от соседа;
- реальные зависимости в контейнерах: Testcontainers поднимает настоящие PostgreSQL, Kafka или Redis на время теста. Мок базы или брокера даёт ложную уверенность, а контейнер стартует за секунды;
- контрактные тесты: Pact или Spring Cloud Contract. Потребитель фиксирует ожидания от API, провайдер проверяет, что их выполняет. Так заглушки остаются честными без полного развёртывания;
- полное окружение:
docker composeили временный namespace в Kubernetes на ветку, общий стенд для сквозных сценариев. Нужно для критичных бизнес-потоков, но тестов на этом уровне держат мало: они медленные и чаще падают по причинам, не связанным с кодом; - внешние платные сервисы: платёжные шлюзы, СМС, доставку почти всегда заменяют заглушкой или песочницей провайдера.
Закончите тем, как было в вашем проекте: что мокали, что поднимали целиком, какие баги ловил каждый уровень. Если был только общий стенд, скажите об этом прямо и объясните, что изменили бы.
Где спотыкаются
Отвечают «только моки». Заглушки пишутся по документации, сервис со временем меняет API, тесты зелёные, а прод падает. Без контрактных тестов это вопрос времени.
Отвечают «только полное развёртывание». Такой набор идёт часами, нестабилен, а сбой соседнего сервиса на нём не воспроизвести по заказу.
Путают моки внутри кода, например Mockito или unittest.mock, с сетевыми заглушками. Первые подменяют объект в процессе, вторые изображают целый сервис по HTTP, и задачи у них разные.