REST APIによるファイルのアップロードをテストしたいと思います。 RequestBody
の代わりにRequestParam
というファイルを送信するのはかなり紛らわしいことが分かりました。テストファイルのアップロードSpring MVC
コントローラ方法:私はそれをテストしたいと私はモックを使用しました
@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.Now。それをデバッグしている間、モックサービスは動作していますが、この引数を使ったメソッドは呼び出されないので、テストは失敗します。どうすればこの問題を処理できますか?
@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でファイルを送ることができますが、どうすればそれをparamとして送ることができますか?
EDIT:
私は方法を変更したが、問題はありません。
Argument(s) are different! Wanted:
mockFileService.uploadFile(
[email protected],
"/"
);
は方法のように見えるMockMultipartFileの2つのインスタンスを使用しています。 2番目の質問はまだ開いていますが、この方法をPostmanからどのようにテストすることができますか?
あなたがテストしたいメソッドへの実際の呼び出しを嘲笑してしまった、私はあなたが偽のファイルを欲しかったと信じていますか? – freakman
@freakman私はファイルを嘲笑するのは良くないと読んだ。ここで私は実際にファイルをアップロードしないためにサービスを模擬したいので、実際のメソッド呼び出し – quento
を模擬したいのですが、あなたはファイルを嘲笑してしまったので、ここでテストしたいのですか?これは現時点では何もテストしていません:)私が最初に推測したのは、mockMvcがmockFileServiceについて何も知らず、実際のメソッドを実行しようとしているということです。 'andDo(print())'を追加すると詳細が表示されます – freakman