1. 概要

このクイックチュートリアルでは、MockMvcを使用してSpringでマルチパートPOSTリクエストをテストする方法を説明します。

2. Mavenの依存関係

始める前に、最新のJUnitSpringtestの依存関係を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利用できます。