簡體   English   中英

測試文件上傳Spring MVC

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM