【问题标题】:How to get MvcResult when unit testing POST with MultipartFile使用 MultipartFile 对 POST 进行单元测试时如何获取 MvcResult
【发布时间】:2020-07-10 16:06:47
【问题描述】:

当我只测试微不足道的 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-boot multipart spring-test mockmvc


    【解决方案1】:

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

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

    以下示例适用于 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2017-12-16
      • 2011-04-19
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      相关资源
      最近更新 更多