简体   繁体   English

Spring mvc:使用MockMultipartFIle和其他表单数据对控制器进行单元测试

[英]Spring mvc : Unit testing a controller with MockMultipartFIle and other form data

I'm trying to unit test a controller which takes an request object of type ArticleForm and it contains a list of MultipartFile . 我正在尝试对一个控制器进行单元测试,该控制器接受ArticleForm类型的请求对象,它包含一个MultipartFile列表。

Here is the controller method that I'm trying to test. 这是我正在尝试测试的控制器方法。

@RequestMapping(value = "/admin/save", method = RequestMethod.POST)
    public String save(@ModelAttribute @Valid ArticleForm articleForm,
                BindingResult result, RedirectAttributes redirectAttributes) {
  ....
 }

Below is the Model attribute object ArticleForm 下面是Model属性对象ArticleForm

public class ArticleForm {
    private String id;

    @NotEmpty
    private String title;

    @NotEmpty
    private String description;

    private List<MultipartFile> images = Collections.emptyList();

  }

In my unit test, I want to submit 3 MockMulitpartFile objects as well as title and description 在我的单元测试中,我想提交3个MockMulitpartFile对象以及titledescription

Here is what I have tried. 这是我尝试过的。 The title and description gets populated but the images list is empty 填充titledescription ,但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"));
}

How can I submit those 3 MockMultipartFile objects to the images list in the ArticleForm model attribute ? 如何提交那些3个MockMultipartFile对象的images列表ArticleForm模型属性?

Appreciate any help to resolve this issue. 感谢您解决此问题的任何帮助。

Your test is correct. 你的测试是正确的。 Use "images" for the file name like below. 使用“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"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM