2016-08-22 210 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

是的。這工作。 謝謝。 :) –