2016-08-22 1 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 объектов, а также title и description

Вот что я пытался. title и description их получает, но 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")); 
} 

Как я могу представить эти 3 MockMultipartFile объекты в images списка в атрибуте ArticleForm модели?

Оцените любую помощь, чтобы решить эту проблему.

ответ

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

Да. Это сработало. Спасибо. :) –