【Spring】MockMVCでリクエストパラメータをつける方法

2021年1月24日

MockMVCでリクエストパラメータをつける方法

MockMvcを使ってSpring MVCで作成したAPIをテストする際にGETリクエストにリクエストパラメータをつける方法を紹介します。

実行環境は以下の通りです。

  • Java 11
  • Spring Boot 2.3.1

以下のようにMockHttpServletRequestBuilderクラスのparamメソッドを使ってリクエストパラメータを付与することができます。

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ItemControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void test1() throws Exception {

        mockMvc.perform(
                get("/items")
                .param("id", "123")         //  パラメータを付与
                .param("name", "sample1"))  //   パラメータを付与
                .andExpect(status().isOk()); // レスポンスのステータスコードが200であることを確認
    }
}

この例ではAPIのインターフェイスとなるコントローラとレスポンスクラスを以下のように作成します。

import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

@RestController
public class ItemController {

    @GetMapping("items")
    public ItemResponse index(@RequestParam("id") int id, @RequestParam("name") String name) {

        return new ItemResponse(id, name, 100);
    }
}

Lombokを使ってゲッター、セッター、コンストラクタなどを生成しています。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ItemResponse {

    int id;
    String name;
    int price;
}