2016-08-22 94 views
1

我试图单元测试一个控制器,它接受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对象以及titledescription

这是我都试过了。该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")); 
} 

如何提交在ArticleForm模型属性的3个MockMultipartFile对象的images名单?

感谢任何帮助解决此问题。

回答

2

您的测试是正确的。使用“图像”作为文件名称,如下所示。

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")); 
+0

是的。这工作。 谢谢。 :) –