MockMvc vs. TestRestTemplate

Regular Kim·2025년 8월 21일
0

기타

목록 보기
14/19

MockMvc

  • 서블릿 컨테이너 mocking
  • 컨트롤러 -> 서비스 -> 레포지토리까지 빈 조합을 통해 요청/응답 플로우 테스트
  • HTTP 네트워크 스택은 안 쓰고, 내부 디스패쳐 서블릿 수준에서 처리
  • 속도가 빠르고 단위/슬라이스 테스트에 적합
mvc.perform(post("/api/orders")
        .contentType(MediaType.APPLICATION_JSON)
        .content(om.writeValueAsString(new CreateOrderRequest("pen", 2))))
   .andExpect(status().isCreated())
   .andExpect(jsonPath("$.id").value(100));

TestRestTemplate

  • SpringBoot에서 제공하는 통합 테스트용 HTTP 클라이언트
  • 내장 톰캣을 실제 띄운 뒤, HTTP 요청 전송 -> 응답 확인
  • 네트워크 레벨까지 포함한 엔드 투 엔드 테스트
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class OrderApiE2ETest {
    @Autowired TestRestTemplate rest;

    @Test
    void createOrder_201() {
        var req = new CreateOrderRequest("pen", 2);
        var response = rest.postForEntity("/api/orders", req, OrderResponse.class);

        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);
        assertThat(response.getBody().status()).isEqualTo("CREATED");
    }
}

그래서?

내부 API 동작만 빠르게 검증 -> MockMvc
실제 API 엔드포인트를 클라이언트처럼 호출/검증 -> TestRestTemplate

profile
What doesn't kill you, makes you stronger

0개의 댓글