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

我有以下用于保存汽车的请求处理程序。我已经验证了使用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表示形式。

回答:

由于MockMvcRequestBuilders#fileUpload已弃用,因此你将使用MockMvcRequestBuilders#multipart(String, Object...)返回的MockMultipartHttpServletRequestBuilder。然后链接一堆file(MockMultipartFile)calls。

这是一个工作示例。给定一个@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;

}

}

}

and a unit test

@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"));

}

}

And the @Configuration class

@Configuration

@ComponentScan({ "test.controllers" })

@EnableWebMvc

public class WebConfig extends WebMvcConfigurationSupport {

@Bean

public MultipartResolver multipartResolver() {

CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();

return multipartResolver;

}

}

The test should pass and give you output of

4 // from param

someValue // from json file

filename.txt // from first file

other-file-name.data // from second file

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

以上是 使用Spring MVC Test对多部分POST请求进行单元测试 的全部内容, 来源链接: utcz.com/qa/424204.html

回到顶部