我正在为我的控制器类编写单元测试。我在用春光网。因此,我正在用WebTestClient编写测试。这是我的控制器方法
@PutMapping("/updatedocument/{documentType}")
public ResponseEntity<String> updateDocument(@PathVariable String documentType,
@RequestParam("file") MultipartFile file) {
...................
}当我从邮递员或任何rest客户端呼叫时,这段代码就可以工作了。我在编写单元测试时遇到了困难。我得到了
“所需的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
发布于 2020-01-02 19:07:14
我解决了这个问题。主要的罪魁祸首是我的控制器方法,而不是测试方法。
必须在控制器方法中改变两件事。在使用弹簧网流量(反应性)时,我们应该使用
1.@RequestPart而不是@RequestParam
FilePart而不是MultipartFile因此控制器方法将如下所示。
@PutMapping("/updatedocument/{documentType}")
public ResponseEntity<String> updateDocument(@PathVariable DocumentType documentType,
@RequestPart("file") FilePart filePart) {
.....................
}您可以将FilePart转换为文件对象。
https://stackoverflow.com/questions/59395681
复制相似问题