java - 使用 WebtestClient 测试 MultipartFile
问题描述
我正在为我的控制器类编写单元测试。我正在使用弹簧 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 webflux(reactive) 我们应该使用
1.@RequestPart
代替@RequestParam
2.FilePart
代替MultipartFile
所以控制器方法看起来像这样。
@PutMapping("/updatedocument/{documentType}")
public ResponseEntity<String> updateDocument(@PathVariable DocumentType documentType,
@RequestPart("file") FilePart filePart) {
.....................
}
您可以将 FilePart 转换为 File 对象。
推荐阅读
- c++ - 什么是 gcc 编译器优化?
- numpy - 计算 3D 数组特定部分的平均值
- java - 如何将类中的属性与字符串进行比较?
- android - 使用 Android BillingClient 2.1 检索应用内购买,返回空列表
- javascript - 我想知道我可以在 if() 中写比这更短的条件吗?
- promise - 使用 Cherio 进行平行刮削
- intellij-idea - 将 IntelliJ IDEA 字体恢复为 2020.1 之前的默认字体
- r - R:如何为我的数据集创建特定的循环和 ifelse 语句。(附数据集)
- list - 你好,我想知道如何删除列表的第一个元素
- django-rest-framework - Django中的隔离和并发