我正在为我的控制器类编写单元测试。我正在使用 spring webflux。因此我正在编写测试WebTestClient
。这是我的控制器方法
@PutMapping("/updatedocument/{documentType}")
public ResponseEntity<String> updateDocument(@PathVariable String documentType,
@RequestParam("file") MultipartFile file) {
...................
}
当我从 Postman 或任何其他客户端调用时,此代码有效。我在编写单元测试时遇到困难。我正进入(状态
“所需的 MultipartFile 参数‘文件’不存在”
错误 。这是我的测试方法。
@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
我能够解决这个问题。罪魁祸首是我的控制器方法,而不是测试方法。
必须更改控制器方法中的一些内容。当使用 Spring Web Flux(Reactive) 时,我们应该使用
1.@RequestPart
代替@RequestParam
2. FilePart
代替MultipartFile
所以控制器方法将如下所示。
@PutMapping("/updatedocument/{documentType}")
public ResponseEntity<String> updateDocument(@PathVariable DocumentType documentType,
@RequestPart("file") FilePart filePart) {
.....................
}
您可以将 FilePart 转换为 File 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)