SpringマルチパートPOSTリクエストのテスト
1. 概要
このクイックチュートリアルでは、MockMvcを使用してSpringでマルチパートPOSTリクエストをテストする方法を説明します。
2. Mavenの依存関係
始める前に、最新のJUnitとSpringtestの依存関係をpom.xmlに追加しましょう。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.16.RELEASE</version>
<scope>test</scope>
</dependency>
3. マルチパートPOSTリクエストのテスト
RESTコントローラーで簡単なエンドポイントを作成しましょう。
@PostMapping(path = "/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
return file.isEmpty() ?
new ResponseEntity<String>(HttpStatus.NOT_FOUND) : new ResponseEntity<String>(HttpStatus.OK);
}
ここで、uploadFileメソッドはマルチパートPOST要求を受け入れます。 このメソッドでは、ファイルが存在する場合はステータスコード200を送信します。 それ以外の場合は、ステータスコード404を送信します。
それでは、MockMvcを使用して上記のメソッドをテストしてみましょう。
まず、単体テストクラスのWebApplicationContextを自動配線しましょう。
@Autowired
private WebApplicationContext webApplicationContext;
次に、上記で定義したマルチパートPOSTリクエストをテストするメソッドを作成しましょう。
@Test
public void whenFileUploaded_thenVerifyStatus()
throws Exception {
MockMultipartFile file
= new MockMultipartFile(
"file",
"hello.txt",
MediaType.TEXT_PLAIN_VALUE,
"Hello, World!".getBytes()
);
MockMvc mockMvc
= MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(multipart("/upload").file(file))
.andExpect(status().isOk());
}
ここでは、 MockMultipartFile コンストラクターを使用してhello.txtファイルを定義し、次に前に定義したwebApplicationContextオブジェクトを使用してmockMvcオブジェクトを構築しています。
MockMvc#performメソッドを使用してRESTエンドポイントを呼び出し、ファイルオブジェクトを渡します。 最後に、ステータスコード200をチェックして、テストケースを確認します。
4. 結論
この記事では、例を使用してMockMvcを使用してSpringマルチパートPOSTリクエストをテストする方法を説明しました。
いつものように、プロジェクトはGitHubで利用できます。