2016-08-22 17 views
1

ArticleForm 요청 개체를 사용하는 컨트롤러를 단위 테스트하려고하는데 MultipartFile의 목록이 포함되어 있습니다.스프링 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 객체뿐만 아니라 title로하고 description 여기

내가 시도 무엇을 제출합니다. 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 모델 속성에 images 목록에 그 3 개 MockMultipartFile 객체를 제출할 수 있습니다 비어?

이 문제를 해결하는 데 도움을 주셔서 감사합니다.

답변

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

예. 그게 효과가 있었어. 감사합니다. :) –