如何在 MockMVC 中 POST multipart/form-data?

How to POST multipart/form-data in MockMVC?

我创建了一个会消耗 'multipart/form-data'

的控制器
@PostMapping(value="/sample")
public void sample(
    @ModelAttribute("request") SampleRequest request){
    // codes
}

SampleRequest 对象

@NotNull
private MultipartFile file;

@Pattern(regexp = "^[0-9A-Za-z]*")
private String fileName;

private String other;

现在,我将尝试使用 Mock MVC 对其进行测试,但我不知道如何将 'multipart/form-data' 作为内容传递。我看到很多样本使用 JSON 但没有使用 multipart/form-data

mockMvc.perform(post(path)
        .servletPath(path)
        .headers(headers)
        .contentType(MediaType.MULTIPART_FORM_DATA)
        .content(request)) // -> How to put the multipart/form-data here
        .andDo(print())
        .andReturn();

有什么方法可以让我用 multipart/form_data 完成我的请求?理想情况下,它需要在 MockHttpServletRequest

的正文中
MockHttpServletRequest:
  HTTP Method = POST
  Request URI = --path
  Parameters = {}
  Headers = --headers
  Body = null

我已经做到了:

      Resource fileResource = new ClassPathResource("YOUR FILE NAME");
    
      assertNotNull(fileResource);

      MockMultipartFile firstFile = new MockMultipartFile( 
            "file",fileResource.getFilename(),
             MediaType.MULTIPART_FORM_DATA_VALUE,
             fileResource.getInputStream());  
    
     assertNotNull(firstFile);
    
     MockMvc mockMvc = MockMvcBuilders.
             webAppContextSetup(webApplicationContext).build();

     MvcResult andReturn = mockMvc.perform(MockMvcRequestBuilders
           .multipart(**YOUR URL**)
           .file(firstFile)
           .headers(**YOUR HEADERS**))
            .andDo(print())
            .andExpect(status().isOk())
            .andReturn();

我在这里看过这个例子:

https://www.baeldung.com/spring-multipart-post-request-test