2017-01-17 19 views
1

Я использую Spring Cloud Contract для создания заглушек для службы REST, чтобы я мог протестировать с клиентом REST. У меня есть тупик, работающий в приложении Spring Boot, и все работает так, как ожидалось. Проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы видеть элементы запросов в ответах, чтобы лучше имитировать возможное поведение службы REST. Например, в этом контракте, я хотел бы, что передается в поле «код» в запросе появляться выплюнул в ответ:Использование Spring Cloud Contract Groovy DSL, как я могу параметризовать ответ для включения значений из запроса?

package contracts 

org.springframework.cloud.contract.spec.Contract.make { 
    request { 
     method('POST') 
     url $("/resource") 
     body ([ 
       code : $(client(regex('[a-zA-Z0-9]{5,32}'))) 
     ]) 
    } 

    response { 
     status 200 
     body([ 
       code: ??? 
     ]) 
    } 
} 

Очевидно, что вход «код» может быть все, что совпадает с регулярным выражение, и поэтому фактическое значение неизвестно до времени выполнения. Есть ли что-нибудь, что я могу поставить вместо «???» вернуть код, указанный в запросе? Я попытался доступа, например:

request.body.serverValue['code'] 

, но это значение, кажется, генерируется во время компиляции, возможно, для того, чтобы авто-генерации тестов в ContractVerifierTest.java под сгенерированных-тест-источников.

Можно ли это сделать? Является ли это подходящим использованием контракта Spring Cloud?

+0

Я обновил ответ, потому что, фактически начиная с 1.1.0, вы можете это сделать. –

+0

oh, отлично @MarcinGrzejszczak, спасибо за обновление! – billshwah47

ответ

1

В настоящее время он не поддерживается. Мы предпочитаем подход, когда у вас более простые контракты. Если вам нужно в ответе, то значение из запроса просто жестко кодирует как запрос, так и ответные части контракта.

Вы можете, однако, подать вопрос, и мы можем попытаться что-то придумать в будущих выпусках.

UPDATE:

Начиная с версии 1.1.0, которая уже возможно. Ознакомьтесь с документами для получения дополнительной информации - http://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.1.0.RELEASE/#_referencing_request_from_response

+0

Как мы можем передать параметр запроса в контракте DSL, используя контракт Spring Cloud для архитектуры микросервисов. – blackOcean

+0

Вы имеете в виду ссылочную часть запроса в ответе? Если это вопрос, то проверьте мой обновленный ответ, где я укажу на документацию. –

Смежные вопросы