Каптор описан тут:
- Разносим по полочкам этапы тестирования http запросов в Spring, Ordering Chaos: Arranging HTTP Request Testing in Spring
- Повышаем наглядность интеграционных тестов, Enhancing the Visibility of Integration Tests
Об использовании в проекте Интеграционное тестирование в проекте
TODO:
- response builder chain - wiremock-chain-poc.
Введение
Я давно использую wiremock для мокирования внепроцессных зависимостей. Хотел бы поделиться с вами тем, как я это делаю.
Инструменты
Spring, spock. На котлине благодаря сахору проще описывать dsl для мокирования.
Сценарий
Менеджеры попросили сделать бэкдор в приложении, через которые мы отправляем сообщения.
Или свидетельство канарейки. Или уведомление товарищу менеджеру.
DSL для мокирования
Базовое описание моков в WireMock многословно, поэтому предлагается DSL, представленный в [wiremock-api-definition.kt].
Пример:
val methodCaptor = serverMock.method(withSuccess("""{}"""))
^ ^ ^ ^
|- объект захвата | | |- описание ответа от мока
| | - микирование
| - объект WireMockServer
Мокирование по Arrange Act Assert
Не указываю явно, просто проверяю url.
Перехват исходящих запросов
Использую каптор, подробнее можно посмотреть в статье. Просто упоминаю, так как это основной элемент, но подробно не буду повторяться. Цель этой штуку - отделить этап описания ответа, от проверки срабатывания мока. При этом каптор позволяет эффективно проверять все. Есть история запросов.
Delay
Если нужно установить задержку ответа, может быть полезно для
Пример с задержкой:
val methodCaptor = serverMock.method(
withDelay(Duration.parse(delay), withSuccess("""{}"""))
)
Chain
Пример с цепочкой ответов:
val methodCaptor = serverMock.method(
withConnectionReset(),
withSuccess("""{}""")
)
Callbacks
Если нужно описать эммитирование ответа от системы, типа уведомление или встречный запрос.
Как можно проверить, что мы ответили?