Должны ли контракты Spring Cloud быть конкретными или гибкими?

В нашем проекте используются 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())
    ])
}

Определенные таким образом заглушки будут гибкими, но в итоге мы проверяем только наличие полей в запросе и их формат.

Как правильно составить договор?


person omnichord    schedule 30.10.2020    source источник


Ответы (1)


Это зависит только от того, что вы предпочитаете. Если вы используете первый вариант, вы все равно можете использовать раздел bodyMatchers, где вы можете, используя xpath или jspath, определить, какие части тела должны быть динамическими. Все дело в предпочтениях.

person Marcin Grzejszczak    schedule 30.10.2020
comment
Ну что ж, я надеялся, что есть Единственный верный способ сделать это, и я смогу перестать спорить с моими коллегами по этому поводу. - person omnichord; 30.10.2020