首页 > 解决方案 > 使用 MultipartFile 对 POST 进行单元测试时如何获取 MvcResult

问题描述

当我只测试微不足道的 POST 请求时,我可以获得 MvcResult 并从中得到一些东西:

MvcResult result = mockMvc.perform(post("/api/register")
                .contentType(MEDIA_TYPE_JSON_UTF8)
                .content(new Gson().toJson(request)))
                .andExpect(status().isCreated())
                .andReturn();
Long tempId = Long.valueOf(JsonPath.read(result.getResponse().getContentAsString(), "$.id").toString());

但是当我使用 MultipartFile 时,我只能使用 MockMvcRequestBuilders 并且只能检查期望值。

MockMultipartFile filePart = new MockMultipartFile(
                "file",
                "file.jpg",
                "image/jpeg", file);
mockMvc.perform(MockMvcRequestBuilders.multipart("/api/loadfile")
                .file(filePart)
                .param("json", json))
                .andExpect(status().isOk()); 

请求后如何通过多部分 POST 获取 MvcResult?

标签: spring-bootmultipartspring-testmockmvc

解决方案


您可以像在简单的 POST 示例中那样立即.andReturn();调用。.andExpect()

调用会mockMvc.perform()返回一个ResultActions独立于任何 HTTP 方法或请求的对象。

以下示例适用于 Spring Boot 2.3.0:

byte[] file = new byte[10];
MockMultipartFile filePart = new MockMultipartFile(
  "file", "file.jpg", "image/jpeg", file);

MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.multipart("/api/loadfile")
  .file(filePart)
  .param("json", "json"))
  .andExpect(status().isOk())
  .andReturn();

推荐阅读