我有一个Spring(3.0)控制器,其方法有HttpServletRequest
作为参数之一,因为它处理(多个)文件上传。
@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload",
method = RequestMethod.POST)
@ResponseBody
public final String uploadClassifiedPicture(
@PathVariable int idClassified,
@PathVariable int idPerson,
@RequestParam String token,
HttpServletRequest request);
如何进行单元测试?我知道我可以创建MockHttpServletRequest
,但我不知道如何将一个或多个文件传递给它。
MockHttpServletRequest request = new MockHttpServletRequest("POST",
"/classified/38001/dealer/54/upload?token=dfak241adf");
答案 0 :(得分:9)
我建议稍微更改方法签名,使上传的文件成为普通参数(类型为MultipartFile
(不是CommonsMultipartFile
)):
@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload",
method = RequestMethod.POST)
@ResponseBody
public final String uploadClassifiedPicture(
@PathVariable int idClassified,
@PathVariable int idPerson,
@RequestParam String token,
@RequestParam MultipartFile content);
然后您可以在测试中使用MockMultipartFile
:
final String fileName = "test.txt";
final byte[] content = "Hallo Word".getBytes();
MockMultipartFile mockMultipartFile =
new MockMultipartFile("content", fileName, "text/plain", content);
uploadClassifiedPicture(1, 1, "token", mockMultipartFile);
如果您不想更改方法签名,则可以改为使用MockMultipartHttpServletRequest
。
它有一个方法addFile(MultipartFile file)
。当然,所需参数可以是MockMultipartFile
。
答案 1 :(得分:2)
您还可以使用MockMvc对象以及MockMvcRequestBuilders将测试文件上传请求发送到您的控制器:
@Test
public void testSendNotEmptyFile() throws Exception {
mvc.perform(MockMvcRequestBuilders.fileUpload("Your controller URL")
.file("file", "Test Content".getBytes())
.contentType(MediaType.MULTIPART_FORM_DATA)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}