В нашем проекте используются 2 стиля написания контрактов. Во-первых, сохранить и запрос, и ответ в виде файлов json и использовать их для определения контракта:
request {
body(file("request.json"))
}
response {
body(file("response.json"))
}
Он создает заглушки, которые не работают, если ваш запрос не заполнен точно так же, как request.json
, что затрудняет написание модульных тестов с заглушками для потребителя. Однако использование конкретных значений может быть лучше для тестирования интеграции.
Второй подход - максимально использовать регулярные выражения:
request {
body([
clientName: $(anyNonBlankString()),
accountNumber: $(consumer(regex("[0-9]{20}")), producer("12345678901234567890")),
amount: $(anyNumber())
])
}
Определенные таким образом заглушки будут гибкими, но в итоге мы проверяем только наличие полей в запросе и их формат.
Как правильно составить договор?