Использовали ли мокирование на входе и выходе сервисов
Что проверяют
Умеете ли вы изолировать сервис от соседей и проверять не только его ответ, но и то, что он отправляет дальше. Следом обычно спрашивают, как вы убеждались, что мок совпадает с реальным API, и как проверяли отказы зависимостей.
Как отвечать
Разделите вопрос на две стороны, так ответ сразу звучит продуманно:
- вход: вы подаёте сервису подготовленные данные вместо реального источника: запрос другого сервиса, сообщение в Kafka, файл. Так получают нужное состояние, в том числе редкое и невалидное, без долгой подготовки окружения;
- выход: вы подменяете зависимость, куда сервис ходит сам: платёжный шлюз, уведомления, внешнее API. Проверяете, как сервис обрабатывает разные ответы и что именно он отправил, с какими параметрами и сколько раз.
Инструменты, которые стоит назвать, если работали с ними:
- WireMock или MockServer: HTTP-заглушки для API-тестов. В WireMock исходящий вызов проверяют через
verify(postRequestedFor(urlEqualTo("/payments"))), задержку задаютwithFixedDelay, обрыв соединения черезFault; - Testcontainers: настоящие Kafka или PostgreSQL в Docker, когда мок поведения не передаст;
- Charles или Fiddler: подмена ответа через Map Local или AutoResponder при ручном тестировании, а в UI-автотестах
page.routeв Playwright.
Опишите свой случай: какой сервис, что замокали, какой баг нашли. Лучший пример это ошибка, которую без мока не воспроизвести: таймаут платёжки, повтор после 503, дубль уведомления. Если такого опыта не было, скажите честно и расскажите, как подменяли ответы хотя бы через Charles или Postman Mock Server.
Где спотыкаются
Не думают о расхождении мока с реальностью. Партнёр поменял формат ответа, моки остались старыми, тесты зелёные, прод падает. Защищают от этого контрактные тесты вроде Pact или сверка со схемой OpenAPI.
Мокают только успешный ответ. Основная ценность моков в негативных сценариях: 500, таймаут, пустое тело, неожиданное поле.
Мокают всё подряд, включая базу и собственную логику сервиса. Такой тест проверяет моки, а не сервис.