Java Spring MVC测试多文件上传
我有一个控制器,可以处理多个文件上传:Java Spring MVC测试多文件上传,java,spring-mvc,spring-test-mvc,Java,Spring Mvc,Spring Test Mvc,我有一个控制器,可以处理多个文件上传: @PostMapping("/import") public void import(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) { assertUploadFilesNotEmpty(files); ... } 我想测试一下 @Test public void importTest() throws Exception {
@PostMapping("/import")
public void import(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
assertUploadFilesNotEmpty(files);
...
}
我想测试一下
@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());
}
问题是MockMvc创建了MockHttpRequest,其中multipartFiles作为保存上传文件的param的名称。我的控制器希望这些文件位于“文件”参数中
是否可以告诉spring应该以给定的名称在请求中传递多个文件?创建两个名为
文件的MockMultiPartFile
实例
使用添加的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"));
}
@PostMapping(consumes=MediaType.MULTIPART\u FORM\u DATA\u VALUE)
public void addProduct(@RequestPart(value=“addProductRequest”)@有效的AddUpdateProductRequest请求,
@RequestPart(value=“files”)最终列表文件)引发异常{
request.setProductImages(文件);
productService.createProduct(请求);
}
@试验
public void testUpdateProduct()引发异常{
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=新的MockMultipartFile(“addProductRequest”、“application/json”、JsonUtils.toJson(addProductRequest.getBytes());
MockMultipartFile file1=新的MockMultipartFile(“files”,“test_image.png”,“image/png”,inputStreamFirstImage);
MockMultipartFile file2=新的MockMultipartFile(“files”、“test_image2.png”、“image/png”、inputStreamSecondImage);
ResultMatcher ok=MockMvcResultMatchers.status().isOk();
mockMvc.perform(MockMvcRequestBuilders.fileUpload(“/addproduct”)
.file(文件1)
.file(文件2)
.file(jsonBody)
.contentType(MediaType.MULTIPART\u FORM\u DATA\u VALUE))
.andDo(MockMvcResultHandlers.log())
.andExpect(确定)
.andExpect(content().string(“success”);
}