Как проверить, могу ли я загрузить большой многочастный файл - PullRequest
1 голос
/ 31 марта 2020

Мой код изначально ломался, если я попытался извлечь sh большой файл (размером более 1 МБ). Теперь он работает нормально и может соответствовать размерам файлов, которые я хочу, добавив следующее в файл свойств.

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

Но как я могу написать для этого правильный тестовый модуль / интеграционный тест, чтобы обеспечить размер файла до 10 МБ?

Ниже приведен хороший пример теста (принятый ответ) но он использует фиктивную настройку файла для тестирования. Использование Spring MVC Тест для модульного тестирования многочастного POST-запроса

  1. Есть ли способ, которым я мог бы посмеяться и указать размер файла?
  2. Или на самом деле передать большой файл для тестирования (желательно нет)?
  3. Или лучший способ сделать это, проверить, могу ли я принять большой файл размером до 10 МБ?

Это тестируемый метод

@PostMapping(path = "/example", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<SomeResponse> upload(@PathVariable(@RequestPart("file") MultipartFile file) {

    //we won't even get inside thi method and would fail if the file size is over 1MB previously. 

    // It works currently when I add files with size above 1MB 
    // cos I added the above 2 lines (spring.servlet.... in the properties file)

    // some logic which works fine.

    SomeResponse obj = // 
    return new ResponseEntity<>(obj, HttpStatus.OK);
}

Это текущий тест (и существуют другие тесты для тестирования негативного сценария ios)

@Test
public void testValidUpload() throws Exception {
    String fileContents = "12345";
    String expectedFileContents = "12345\nSomeData";

    mockServer.expect(requestTo("http://localhost:8080/example"))
        .andExpect(method(HttpMethod.POST))
        .andExpect(expectFile("file", "test.csv", expectedFileContents))
        .andRespond(withStatus(HttpStatus.OK)
                .contentType(MediaType.TEXT_PLAIN)
                .body("done")
        );

    String response = this.mvc.perform(multipart("/example")
        .file(new MockMultipartFile("file", "filename.csv", MediaType.TEXT_PLAIN_VALUE, fileContents.getBytes())))
        .andExpect(status().isOk())
        .andExpect(content().contentType(APPLICATION_JSON))
        .andExpect(jsonPath("responseStatusCode", Matchers.equalTo("200")))
        .andExpect(jsonPath("httpStatus", Matchers.equalTo("OK")))
        .andReturn().getResponse().getContentAsString();

    Response response = objectMapper.readValue(response, Response.class);
    assertEquals(HttpStatus.OK, response.getHttpStatus());
    assertEquals(5, response.id());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...