2016-08-22 9 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) { 
    .... 
} 

モデルは、私のユニットテストで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リストは、私がArticleFormモデル属性にimagesリストにそれらの3つのMockMultipartFileオブジェクトを提出することができますどのように

@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")); 
} 

空のですか?

この問題を解決するためのお手伝いをお待ちしております。

答えて

2

あなたのテストは正しいです。以下のようにファイル名に "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")); 
+0

はい。それはうまくいった。 ありがとうございます。 :) –

関連する問題