xLa*_*ncy 3 java spring-mvc spring-test-mvc
我有控制器,它处理多个文件上传:
@PostMapping("/import")
public void import(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
assertUploadFilesNotEmpty(files);
...
}
Run Code Online (Sandbox Code Playgroud)
我想测试一下
@Test
public void importTest() throws Exception {
MockMultipartFile file = new MockMultipartFile("file", "list.xlsx", MIME_TYPE_EXCEL, Files.readAllBytes(Paths.get(excelFile.getURI())));
mvc.perform(fileUpload("/import").file(file).contentType(MIME_TYPE_EXCEL)).andExpect(status().isOk());
}
Run Code Online (Sandbox Code Playgroud)
问题是 MockMvc 使用 multipartFiles 作为保存上传文件的参数的名称创建 MockHttpRequest。我的控制器希望这些文件位于“文件”参数中。
是否可以告诉 spring 应该在给定名称下的请求中传递多个文件?
MockMultiPartFile使用名称创建两个实例files
完整的工作示例,添加了 Json 请求正文以及以下多个文件:
@PostMapping(consumes=MediaType.MULTIPART_FORM_DATA_VALUE)
public void addProduct(@RequestPart(value="addProductRequest") @Valid AddUpdateProductRequest request,
@RequestPart(value = "files") final List<MultipartFile> files) throws Exception{
request.setProductImages(files);
productService.createProduct(request);
}
@Test
public void testUpdateProduct() throws Exception {
AddUpdateProductRequest addProductRequest = prepareAddUpdateRequest();
final InputStream inputStreamFirstImage = Thread.currentThread().getContextClassLoader().getResourceAsStream("test_image.png");
final InputStream inputStreamSecondImage = Thread.currentThread().getContextClassLoader().getResourceAsStream("test_image2.png");
MockMultipartFile jsonBody = new MockMultipartFile("addProductRequest", "", "application/json", JsonUtils.toJson(addProductRequest).getBytes());
MockMultipartFile file1 = new MockMultipartFile("files", "test_image.png", "image/png", inputStreamFirstImage);
MockMultipartFile file2 = new MockMultipartFile("files", "test_image2.png", "image/png", inputStreamSecondImage);
ResultMatcher ok = MockMvcResultMatchers.status().isOk();
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/add-product")
.file(file1)
.file(file2)
.file(jsonBody)
.contentType(MediaType.MULTIPART_FORM_DATA_VALUE))
.andDo(MockMvcResultHandlers.log())
.andExpect(ok)
.andExpect(content().string("success"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2526 次 |
| 最近记录: |