如何使用 junit 使用 MultiPart 参数测试 REST API?
How to test REST API with MultiPart parameter using junit?
我需要一些帮助来测试 POST REST 功能,
我得到了这个 REST 函数头:
@RequestMapping(value = "/import", method = RequestMethod.POST)
public @ResponseBody
HistoricalDataImportResponse importHistoricalDataFile(String fileFormat, @RequestParam("file") MultipartFile stream) {
我尝试使用 JUnit 测试它:
@Test
public void testHistoricalDataImport() throws Exception {
ObjectMapper mapper = new ObjectMapper();
FileItem fileItem = new DiskFileItem(null, null, false, null, 0, null);
MultipartFile eventRequest = new CommonsMultipartFile(null);
String body = mapper.writeValueAsString(eventRequest);
//when
MvcResult result = this.mockMvc.perform(post("/historicaldata/import").contentType(MediaType.MULTIPART_FORM_DATA).content(body))
.andExpect(status().isOk())
.andReturn();
}
测试 运行 时 fileItem
为空,我如何需要将一些文件传递给我的 REST 函数?
通过查看您的代码,您似乎想要从文件系统读取文件,然后使用 objectMapper 将其转换为 JSON。这是编写单元测试的不正确方式,您不从单元测试访问文件系统,您的测试应该 运行 隔离。使用下面的代码
@Test
public void testHistoricalDataImport() throws Exception {
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.fileUpload("/historicaldata/import")
.file("filename","some data as file text".getBytes());
MvcResult result = mockMvc.perform(requestBuilder).andExpect(status().isOk()).andReturn();
}
最终测试如下:
@Test
public void testHistoricalDataImport() throws Exception {
MockMultipartFile firstFile = new MockMultipartFile("file", "filename.csv", "text/plain", "some CSV data".getBytes());
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.fileUpload("/historicaldata/import")
.file(firstFile);
MvcResult result = mockMvc.perform(requestBuilder)
.andExpect(status().isOk())
.andReturn();
}
我需要一些帮助来测试 POST REST 功能,
我得到了这个 REST 函数头:
@RequestMapping(value = "/import", method = RequestMethod.POST)
public @ResponseBody
HistoricalDataImportResponse importHistoricalDataFile(String fileFormat, @RequestParam("file") MultipartFile stream) {
我尝试使用 JUnit 测试它:
@Test
public void testHistoricalDataImport() throws Exception {
ObjectMapper mapper = new ObjectMapper();
FileItem fileItem = new DiskFileItem(null, null, false, null, 0, null);
MultipartFile eventRequest = new CommonsMultipartFile(null);
String body = mapper.writeValueAsString(eventRequest);
//when
MvcResult result = this.mockMvc.perform(post("/historicaldata/import").contentType(MediaType.MULTIPART_FORM_DATA).content(body))
.andExpect(status().isOk())
.andReturn();
}
测试 运行 时 fileItem
为空,我如何需要将一些文件传递给我的 REST 函数?
通过查看您的代码,您似乎想要从文件系统读取文件,然后使用 objectMapper 将其转换为 JSON。这是编写单元测试的不正确方式,您不从单元测试访问文件系统,您的测试应该 运行 隔离。使用下面的代码
@Test
public void testHistoricalDataImport() throws Exception {
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.fileUpload("/historicaldata/import")
.file("filename","some data as file text".getBytes());
MvcResult result = mockMvc.perform(requestBuilder).andExpect(status().isOk()).andReturn();
}
最终测试如下:
@Test
public void testHistoricalDataImport() throws Exception {
MockMultipartFile firstFile = new MockMultipartFile("file", "filename.csv", "text/plain", "some CSV data".getBytes());
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.fileUpload("/historicaldata/import")
.file(firstFile);
MvcResult result = mockMvc.perform(requestBuilder)
.andExpect(status().isOk())
.andReturn();
}