大佬教程收集整理的这篇文章主要介绍了Spring Boot Web 客户端和编写契约合同,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我试图弄清楚如何为以下类编写消费者合同。我已经使用 mockwebserver 很好地编写了 junit 测试。 然而,对于契约测试,我正在苦苦挣扎,似乎无法看到如何让网络客户端使用来自服务器的响应,所有示例都倾向于用于 resttemplate。
public class ordersGateway {
public static final String PATH = "/orders";
private final WebClIEnt webClIEnt;
@autowired
public ordersGateway(String baseURL) {
this.webClIEnt = WebClIEnt.builder()
.baseUrl(baseURL)
.defaultheader(httpheaders.ACCEPT,MediaType.all_value)
.defaultheader(httpheaders.CONTENT_TYPE,MediaType.APPliCATION_JsON_value)
.build();
}
@OverrIDe
public Orderresponse findorders() {
return this.webClIEnt
.post()
.uri(PATH)
.httprequest(httprequest -> {
httpClIEntrequest reactorrequest = httprequest.getNativerequest();
reactorrequest.responseTimeout(Duration.ofSeconds(4));
})
.exchangetoMono(response())
.block();
}
private Function<ClIEntResponse,Mono<OrderResponse>> response() {
return result -> {
if (result.statusCode().equals(httpStatus.OK)) {
return result.bodyToMono(OrderResponse.class);
} else {
String exception = String.format("error",result.statusCode());
return Mono.error(new IllegalStateException(exception));
}
};
}
}
它是用于验证的@test 方法,我不确定如何创建它。我看不到 pact-mock-server 如何拦截 webcleint 调用。
可能会假设 Pact 会自动拦截请求 - 事实并非如此。
因此,当您编写 Pact 单元测试时,您需要明确配置您的 API 客户端以与 Pact 模拟服务进行通信,而不是真实的东西。
使用此 example 作为基础,您的测试可能如下所示:
@ExtendWith(PactConsumerTestExt.class)
@PactTestFor(providerName = "orders-gateway")
public class ordersPactTest {
@Pact(consumer="orders-provider")
public requestResponsePact findorders(PactDslWithProvider builder) {
PactDslJsonBody body = PactDslJsonArray.arrayEachLike()
.uuid("id","5cc989d0-d800-434c-b4bb-b1268499e850")
.StringType("status","STATUS")
.decimalType("amount",100.0)
.closeObject();
return builder
.given("orders exist")
.uponReceiving("a request to find orders")
.path("/orders")
.method("GET")
.willRespondWith()
.status(200)
.body(body)
.toPact();
}
@PactTestFor(pactMethod = "findorders")
@Test
public void findorders(mockServer mockServer) throws IOException {
ordersGateway orders = new ordersGateway(mockServer.getUrl()).findorders();
// do some assertions
}
}
以上是大佬教程为你收集整理的Spring Boot Web 客户端和编写契约合同全部内容,希望文章能够帮你解决Spring Boot Web 客户端和编写契约合同所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。