Как выполнить модульное тестирование загрузки файлов с помощью MockHttpServletRequest? - PullRequest
7 голосов
/ 24 октября 2011

У меня есть контроллер Spring (3.0) с методом, который имеет HttpServletRequest в качестве одного из параметров, так как он обрабатывает (несколько) загрузок файлов.

@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload",
    method = RequestMethod.POST)
@ResponseBody
public final String uploadClassifiedPicture(
    @PathVariable int idClassified,
    @PathVariable int idPerson, 
    @RequestParam String token, 
    HttpServletRequest request);

Как это проверить? Я знаю, что могу создать MockHttpServletRequest, но я не знаю, как передать ему один или несколько файлов.

MockHttpServletRequest request = new MockHttpServletRequest("POST", 
     "/classified/38001/dealer/54/upload?token=dfak241adf");

Ответы [ 2 ]

9 голосов
/ 24 октября 2011

Я рекомендую немного изменить сигнатуру метода, чтобы загруженный файл стал обычным параметром (типа MultipartFile (не CommonsMultipartFile) ):

@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload",
    method = RequestMethod.POST)
@ResponseBody
public final String uploadClassifiedPicture(
    @PathVariable int idClassified,
    @PathVariable int idPerson, 
    @RequestParam String token, 
    @RequestParam MultipartFile content);

Тогда вы можете использовать MockMultipartFile в своем тесте:

final String fileName = "test.txt";
final byte[] content = "Hallo Word".getBytes();
MockMultipartFile mockMultipartFile =
       new MockMultipartFile("content", fileName, "text/plain", content);

uploadClassifiedPicture(1, 1, "token", mockMultipartFile);

Если вы не хотите изменять сигнатуру метода, вы можете использовать MockMultipartHttpServletRequest.

У него есть метод addFile(MultipartFile file). И, конечно, обязательный параметр может быть MockMultipartFile.

2 голосов
/ 07 апреля 2015

Вы также можете использовать объект MockMvc и MockMvcRequestBuilders для отправки запроса загрузки тестового файла на ваш контроллер:

@Test
public void testSendNotEmptyFile() throws Exception {

          mvc.perform(MockMvcRequestBuilders.fileUpload("Your controller URL")
            .file("file", "Test Content".getBytes())
            .contentType(MediaType.MULTIPART_FORM_DATA)
            .accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...