Spring mvc:使用MockMultipartFIle和其他表单数据测试控制器的单元
问题描述:
我试图单元测试一个控制器,它接受ArticleForm
类型的请求对象,它包含一个MultipartFile
的列表。Spring mvc:使用MockMultipartFIle和其他表单数据测试控制器的单元
这是我试图测试的控制器方法。
@RequestMapping(value = "/admin/save", method = RequestMethod.POST)
public String save(@ModelAttribute @Valid ArticleForm articleForm,
BindingResult result, RedirectAttributes redirectAttributes) {
....
}
下面是Model属性对象ArticleForm
public class ArticleForm {
private String id;
@NotEmpty
private String title;
@NotEmpty
private String description;
private List<MultipartFile> images = Collections.emptyList();
}
在我的单元测试,我要提交3个MockMulitpartFile
对象以及title
和description
这是我都试过了。该title
和description
被填充,但images
列表为空
@Test
public void adminController_saveArticleWithTitleAndDescription() throws Exception {
final MockMultipartFile multipartFile1 = new MockMultipartFile("image1", "image1", "image/png", getResourceAsStream("/images/image1.png"));
final MockMultipartFile multipartFile2 = new MockMultipartFile("image2", "image2", "image/png", getResourceAsStream("/images/image2.png"));
final MockMultipartFile multipartFile3 = new MockMultipartFile("image3", "image3", "image/jpeg", getResourceAsStream("/images/image2.png"));
mockMvc.perform(fileUpload("/admin/save")
.file(multipartFile1)
.file(multipartFile2)
.file(multipartFile3)
.contentType(MediaType.MULTIPART_FORM_DATA)
.param("title", "Integration Testing")
.param("description", "This is an integration test"))
.andExpect(flash().attribute(FLASH_TYPE, is(FLASH_TYPE_SUCCESS)))
.andExpect(flash().attribute(FLASH_MESSAGE, is(msgs.getMessage("controller.admin.save.success"))))
.andExpect(status().isFound())
.andExpect(view().name("redirect:/admin/add"));
}
如何提交在ArticleForm
模型属性的3个MockMultipartFile
对象的images
名单?
感谢任何帮助解决此问题。
答
您的测试是正确的。使用“图像”作为文件名称,如下所示。
final MockMultipartFile multipartFile1 = new MockMultipartFile("images", "image1", "image/png", getResourceAsStream("/images/image1.png"));
final MockMultipartFile multipartFile2 = new MockMultipartFile("images", "image2", "image/png", getResourceAsStream("/images/image2.png"));
final MockMultipartFile multipartFile3 = new MockMultipartFile("images", "image3", "image/jpeg", getResourceAsStream("/images/image2.png"));
是的。这工作。 谢谢。 :) –