gpt4 book ai didi

spring - 使用 Spring MVC Test 对多部分 POST 请求进行单元测试

转载 作者:IT老高 更新时间:2023-10-28 13:01:12 27 4
gpt4 key购买 nike

我有以下用于保存汽车的请求处理程序。我已经验证这在我使用时有效。 curl 。现在我想用 Spring MVC Test 对该方法进行单元测试。我曾尝试使用 fileUploader,但无法使其正常工作。我也没有设法添加 JSON 部分。

我将如何使用 Spring MVC Test 对该方法进行单元测试?我找不到这方面的任何例子。

@RequestMapping(value = "autos", method = RequestMethod.POST)
public ResponseEntity saveAuto(
@RequestPart(value = "data") autoResource,
@RequestParam(value = "files[]", required = false) List<MultipartFile> files) {
// ...
}

我想为我的 auto + 一个或多个文件上传 JSON 表示。

我会给正确答案加 100 赏金!

最佳答案

由于 MockMvcRequestBuilders#fileUpload 已被弃用,您需要使用 MockMvcRequestBuilders#multipart(String, Object...)返回 MockMultipartHttpServletRequestBuilder .然后链上一堆file(MockMultipartFile)来电。

这是一个工作示例。给定一个 @Controller

@Controller
public class NewController {

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String saveAuto(
@RequestPart(value = "json") JsonPojo pojo,
@RequestParam(value = "some-random") String random,
@RequestParam(value = "data", required = false) List<MultipartFile> files) {
System.out.println(random);
System.out.println(pojo.getJson());
for (MultipartFile file : files) {
System.out.println(file.getOriginalFilename());
}
return "success";
}

static class JsonPojo {
private String json;

public String getJson() {
return json;
}

public void setJson(String json) {
this.json = json;
}

}
}

还有一个单元测试

@WebAppConfiguration
@ContextConfiguration(classes = WebConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class Example {

@Autowired
private WebApplicationContext webApplicationContext;

@Test
public void test() throws Exception {

MockMultipartFile firstFile = new MockMultipartFile("data", "filename.txt", "text/plain", "some xml".getBytes());
MockMultipartFile secondFile = new MockMultipartFile("data", "other-file-name.data", "text/plain", "some other type".getBytes());
MockMultipartFile jsonFile = new MockMultipartFile("json", "", "application/json", "{\"json\": \"someValue\"}".getBytes());

MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(MockMvcRequestBuilders.multipart("/upload")
.file(firstFile)
.file(secondFile)
.file(jsonFile)
.param("some-random", "4"))
.andExpect(status().is(200))
.andExpect(content().string("success"));
}
}

还有 @Configuration

@Configuration
@ComponentScan({ "test.controllers" })
@EnableWebMvc
public class WebConfig extends WebMvcConfigurationSupport {
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}
}

测试应该通过并给你输出

4 // from param
someValue // from json file
filename.txt // from first file
other-file-name.data // from second file

需要注意的是,您发送 JSON 的方式与发送任何其他多部分文件一样,但内容类型不同。

关于spring - 使用 Spring MVC Test 对多部分 POST 请求进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com