[英]Test file upload Spring MVC
我想测试REST API上传的文件。 我发现以RequestParam
而不是RequestBody
发送文件非常混乱。
控制器方式:
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public
@ResponseBody
ResponseEntity<String> uploadFile(
@RequestParam(name = "file") MultipartFile multipartFile,
@RequestParam(name = "path") String path) {
logger.debug("File upload REST requested");
return new ResponseEntity<>(fileService.uploadFile(
multipartFile, path),
HttpStatus.OK);
}
1.现在我想测试一下,并且已经使用了模拟。 在调试它时,我看到模拟服务正常运行,但没有调用具有此参数的方法,因此测试失败。 我该如何处理?
@Test
public void testUploadFile() throws Exception {
String mockName = "mock";
MockMultipartFile mockMultipartFile = new MockMultipartFile(mockName, mockName.getBytes());
when(mockFileService.uploadFile(mockMultipartFile, rootDir)).thenReturn("success");
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/files/upload")
.file("file", mockMultipartFile.getBytes())
.param("path", rootDir))
.andExpect(status().isOk())
.andExpect(content().string("success"));
verify(mockFileService, times(1)).updateFile(mockMultipartFile, rootDir);
verifyNoMoreInteractions(mockFileService);
}
2.如何与邮递员测试? 我看到可以在Body中发送文件,但是如何将其作为参数发送?
编辑:
我已经更改了方法,但是问题不存在:
Argument(s) are different! Wanted:
mockFileService.uploadFile(
org.springframework.mock.web.MockMultipartFile@61bd0845,
"/"
);
看起来方法使用2个MockMultipartFile实例。 第二个问题仍然存在,如何从邮递员那里测试这种方法?
是的,测试用例失败,因为问题最终出在您的测试用例中,您正在验证对updateFile
()的调用,该调用与在您使用uploadFile
()的controller
的调用不正确,因此必须使用相同的方法进行verify
。
因此,您需要如下更改verify
行:
verify(mockFileService, times(1)). uploadFile(mockMultipartFile, rootDir);
换句话说,当您尝试verify
对其他方法(未在控制器中使用)的调用失败时,Mockito verify会验证方法被调用的次数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.