SpringTestで@Controller のテストを実際のHTTPリクエストでテストしたい時ありますよね。
今回は「MockMvc」を使ってWebレイヤーテストをする方法を書き溜めます。
まずは200のhead応答だけをするRestControllerを定義します。
/healthcheck にGETリクエストすると 200応答します。
1 2 3 4 5 6 7 8 9 10 11 |
@RestController public class AppHealthCheckController { Integer HealthCheckStatus = 200; @GetMapping(value = "/healthcheck") public ResponseEntity<string> sendViaResponseEntity() { ResponseEntity<string> responseEntity = new ResponseEntity<string>("", null, HealthCheckStatus); return responseEntity; } }</string></string></string> |
次に、この/healthcheckパスに対してHTTP GETリクエストして応答をテストするJUnitを書きます。
MockMvcを初期化してperform関数を呼ぶことでテストできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.junit.jupiter.api.Test; 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.web.servlet.MockMvc; @SpringBootTest @AutoConfigureMockMvc public class HealthCheckControllerTest { @Autowired MockMvc mockMvc; @Test void test_GetHealth() throws Exception { mockMvc.perform(get("/healthcheck")).andExpect(status().is(200)).andExpect(content().string("")); } } |
mockMvc.perform(get("/healthcheck")).andExpect(status().is(200)) の部分ですね。
応答のHTTPステータスが200 であることをチェックしています。
HTTP POSTでBodyを送る場合、.content() を使います。