perform(): DispatcherServlet을 통한 요청 실행

상위 맥락

02. 테스트 수행 프로세스 < 01. Controller 단위 테스트 < 02. Spring MVC2 핵심 기술과 설계 < MVC < Spring < Web

핵심 정리

perform()은 RequestBuilder로 만든 가상 요청을 MockMvc 환경 안으로 밀어 넣어 실제 Spring MVC 요청 처리 흐름을 실행하는 메서드입니다. 자료에서는 perform()을 요청 생성결과 검증을 이어주는 핵심 실행 트리거로 설명합니다.

단순히 컨트롤러 메서드를 직접 호출하는 것이 아니라, 가상의 DispatcherServlet을 통해 요청을 처리합니다. 따라서 HandlerMapping, HandlerAdapter, 파라미터 바인딩, 메시지 변환, 예외 처리 흐름까지 Spring MVC의 핵심 경로가 함께 검증됩니다.

실행 흐름

  1. RequestBuilder가 가상의 HTTP 요청을 만듭니다.
  2. MockMvc의 perform()이 요청을 실행합니다.
  3. DispatcherServlet이 요청에 맞는 컨트롤러 메서드를 찾습니다.
  4. HandlerAdapter가 컨트롤러 메서드를 호출합니다.
  5. 처리 결과가 ResultActions로 반환됩니다.
  6. andExpect 체이닝을 통해 결과를 검증합니다.

예외 처리와의 연결

perform() 중 예외가 발생하면 DispatcherServlet은 바로 테스트 실패로 끝내는 것이 아니라 Spring MVC의 예외 처리 인프라를 따릅니다. 즉, @ControllerAdvice@ExceptionHandler가 먼저 개입할 수 있고, 처리되지 않은 예외는 BasicErrorController 쪽으로 위임될 수 있습니다.

한 문장 요약

perform()은 가상 요청을 DispatcherServlet 기반의 Spring MVC 처리 흐름에 태워 실행하고, 그 결과를 검증 가능한 객체로 돌려주는 MockMvc 테스트의 실행 엔진입니다.

핵심 연결

DispatcherServlet, HandlerMapping, HandlerAdapter, MockMvc와 함께 읽으면 좋습니다.