【问题标题】:Unit Testing POST request body while using WebClient使用 WebClient 时对 POST 请求正文进行单元测试
【发布时间】:2020-03-17 09:16:44
【问题描述】:

下面是我的代码的 sn-p,它将多部分请求发送到服务器。 根据某些情况,它决定只发布一个文件或同时发布两者。

// Based on some condition add 1 or 2 files to the multipart body
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
if (postBothFiles) {
    parts.add("File_ONE", new FileSystemResource(file1));
}
parts.add("File_TWO", new FileSystemResource(file2));


// Perform the post request adding `parts` to the body
webClient.post().uri("/postUrl")
                .contentType(MULTIPART_FORM_DATA)
                .body(BodyInserters.fromMultipartData(parts))
                .retrieve()
                .bodyToMono(String.class)
                .block();

在单元测试期间,我想测试条件是否正常工作。为此,通过某种方式,我想验证请求正文是否有两个文件或只有一个。

我尝试使用ExchangeFilterFunction,但它不允许我阅读正文内容。

对此类 POST 请求进行单元测试的最佳方法是什么?

【问题讨论】:

    标签: java spring unit-testing webclient spring-webflux


    【解决方案1】:

    我认为你有两个选择。

    1. 使用PowerMock 监视BodyInserters.fromMultipartDataPowerMock 可以使spy/mock 为静态方法。
    2. 考虑使用okhttp/mockwebserver(https://github.com/square/okhttp/tree/master/mockwebserver#recordedrequest)。它可以像下面的例子一样记录请求正文。
    MockWebServer server = new MockWebServer();
    RecordedRequest request = server.takeRequest();
    assertEquals("{}", request.getBody().readUtf8());
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2018-03-13
      • 2017-06-05
      • 2016-08-11
      相关资源
      最近更新 更多