使用WebtestClient测试MultipartFile

时间:2019-12-18 15:51:41

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

我正在为控制器类编写单元测试。我正在使用spring webflux。因此,我正在使用WebTestClient编写测试。这是我的控制器方法

@PutMapping("/updatedocument/{documentType}")
public ResponseEntity<String> updateDocument(@PathVariable String documentType,
                                             @RequestParam("file") MultipartFile file) {
     ...................
}

当我从Postman或任何其他客户打电话时,此代码有效。我在编写单元测试时遇到困难。我正在

  

“不存在必需的MultipartFile参数'file'”

错误。这是我的测试方法。

@Test
void updateDocument() throws IOException {

    .............
    MultipartBodyBuilder multipartBodyBuilder = new MultipartBodyBuilder();
    multipartBodyBuilder.part("file", new ClassPathResource("somefile"))
            .contentType(MediaType.MULTIPART_FORM_DATA)

    webTestClient.put()
            .uri("/customer/updatedocument/ID")
            .body(BodyInserters.fromMultipartData(multipartBodyBuilder.build()))
            .exchange()
            .expectStatus().isOk();
}

任何建议都值得赞赏。请不要使用WebTestClient而不是MovkMvc

1 个答案:

答案 0 :(得分:0)

我能够解决此问题。罪魁祸首是我的控制器方法而不是测试方法。

必须在控制器方法中更改几件事。使用弹簧幅面助焊剂(活性)时,我们应该使用

1。@RequestPart而不是@RequestParam
2.用FilePart代替MultipartFile

因此,控制器方法将如下所示。

@PutMapping("/updatedocument/{documentType}")
public ResponseEntity<String> updateDocument(@PathVariable DocumentType documentType,
                                             @RequestPart("file") FilePart filePart) {
   .....................
}

您可以将FilePart转换为File对象。