Тестирование загрузки файлов в Spring MVC - PullRequest
0 голосов
/ 02 июля 2018

Настройка проекта:

    <java.version>1.8</java.version>
    <spring.version>4.3.9.RELEASE</spring.version>
    <spring.boot.version>1.4.3.RELEASE</spring.boot.version>

У нас есть REST-контроллер, у которого есть метод для загрузки файла следующим образом:

@PostMapping("/spreadsheet/upload")
public ResponseEntity<?> uploadSpreadsheet(@RequestBody MultipartFile file) {
    if (null == file || file.isEmpty()) {
        return new ResponseEntity<>("please select a file!", HttpStatus.NO_CONTENT);
    } else if (blueCostService.isDuplicateSpreadsheetUploaded(file.getOriginalFilename())) {
        return new ResponseEntity<>("Duplicate Spreadsheet. Please select a different file to upload",
                HttpStatus.CONFLICT);
    } else {
        try {
            saveUploadedFiles(Arrays.asList(file));

        } catch (IOException e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
        }
        return new ResponseEntity("Successfully uploaded - " + file.getOriginalFilename(), new HttpHeaders(),
                HttpStatus.OK);
    }

}

UPDATE: Я попробовал этот подход из старого примера, который я нашел, но он не компилируется чисто, метод MockMvcRequestBuilders.multipart не определен ....

@Test    
    public void testUploadSpreadsheet_Empty() throws Exception {

        String fileName = "EmptySpreadsheet.xls";
        String content  = "";

        MockMultipartFile mockMultipartFile = new MockMultipartFile(
                "emptyFile",
                fileName,
                "text/plain",
                content.getBytes());

        System.out.println("emptyFile content is '" + mockMultipartFile.toString() + "'.");

        mockMvc.perform(MockMvcRequestBuilders.multipart("/bluecost/spreadsheet/upload")
                .file("file", mockMultipartFile.getBytes())
                .characterEncoding("UTF-8"))
        .andExpect(status().isOk());

    }

1 Ответ

0 голосов
/ 03 июля 2018

Я считаю, что MockMvcRequestBuilders.multipart() доступно только с весны 5. То, что вы хотите, это MockMvcRequestBuilders.fileUpload(), которое доступно с весны 4.

...