[英]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.