Ответ
Да, в контексте тестирования я разрабатывал мок-сервисы (или "swap"-сервисы) с нуля для изоляции тестируемой системы и эмуляции поведения внешних или еще не готовых зависимостей. Это ключевая практика для тестирования интеграций и сложных сценариев.
Основные инструменты и подходы, которые я использовал:
-
WireMock (Java): Мощный фреймворк для стабирования HTTP-сервисов. Я создавал отдельные тестовые классы или конфигурационные файлы, которые запускали мок-сервер с заданными ответами.
import static com.github.tomakehurst.wiremock.client.WireMock.*; public class PaymentServiceMock { public void setupStubForSuccess() { // Настройка мока для успешного ответа платежного шлюза stubFor(post(urlPathEqualTo("/api/v1/pay")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/json") .withBody("{ "transactionId": "txn_12345", "status": "SUCCESS" }"))); } public void setupStubForFailure() { // Настройка мока для ответа об ошибке stubFor(post(urlPathEqualTo("/api/v1/pay")) .willReturn(aResponse() .withStatus(402) .withBody("{ "error": "Insufficient funds" }"))); } } -
MockServer: Альтернатива WireMock с похожим функционалом, также использовал для эмуляции REST и SOAP API.
-
Подход "Service Virtualization": Для более сложных случаев (например, эмуляция протоколов, отличных от HTTP) использовал специализированные инструменты вроде Hoverfly или Mountebank.
Цель: Создание предсказуемого и контролируемого тестового окружения, которое позволяет проверять, как основное приложение реагирует на различные ответы зависимостей (успех, ошибки, таймауты, некорректные данные).