程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring Boot Web 客户端和编写契约合同大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring Boot Web 客户端和编写契约合同?

开发过程中遇到Spring Boot Web 客户端和编写契约合同的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring Boot Web 客户端和编写契约合同的解决方法建议,希望对你解决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,请注明来意。