<TIL> 128. MockMvc?

YUJIN LEE·2023년 6월 29일
0

개발log

목록 보기
119/149

웹 어플리케이션은 Tomcat(대표적인 서블릿 컨테이너)이라는 WAS서버에 배포.
브라우저의 요청은 WAS에 전달, 응답도 WAS로 받음.
Web API 테스트 -> WAS를 실행해야함.

MockMvc?

스프링 3.2부터 스프링 MVC를 모킹해 웹 어플리케이션을 테스트하는 라이브러리
-> 실제 서블릿 컨테이너에서 컨트롤러를 실행하지 않고 컨트롤러에 HTTP 요청 가능.

웹 환경에서 컨트롤러를 테스트하려면 서블릿 컨테이너가 구동되고,
DispatcherServlet 객체가 메모리에 올라가야함.
이때 서블릿 컨테이너를 모킹시, 실제 서블릿 컨테이너가 아닌, 테스트 모형 컨테이너를 사용해 간단하게 컨트롤러 테스트 가능.

Mock MVC 설정 -> MockMvcBuilders 사용.

정적메서드 2개 제공

  • standaloneSetup() -> 유닛테스트와 유사
  • webAppContextSetup() -> 통합테스트와 유사

Controller에서 테스트 할 것

  • 요청 경로에 대한 적절한 handler method 호출
  • 입력 파라미터는 handler method에 잘 전달?
  • model에 설정한 값 잘 참조?
  • 요청 결과 페이지 잘 연결?

MockMvc 메서드

  • perform() - 요청 전송 역할, ResultActions 객체를 결과로 받음
    ResultActions -> 리턴값 검증하고 확인할 수 있는 andExpect() 메서드 제공

  • get("/search") - HTTP 메소드 결정 -> 인자로는 경로 전달

  • params - 키=값 파라미터 전달 / 여러개 params(), 하나 param()

  • andExpect() - 응답 검증 / 하나라도 실패시 테스트 실패.
    - 상태코드(status())
    isOk() : 200
    isNotFound() : 404
    isMethodNotAllowed() : 405
    isInternalServerError() : 500
    * is(int status) : status 상태코드

    • 뷰(view()) - 리턴하는 뷰 이름 검증
    • 핸들러(handler()) - 요청에 매핑된 컨트롤러 검증
    • 리다이렉트(redirect()) - 리다이렉트 응답 검증
    • 모델(model())
      • 컨트롤러에서 저장한 모델들의 정보 검증
        • attributeExists(String name) : name에 해당하는 데이터가 model에 있는지 검증
        • attribute(String name, Object value) : name에 해당하는 데이터가 value 객체인지 검증
  • content()) - 응답 정보 검증

  • ContentType - ContentType이란 HTTP 메시지에 담겨 보내는 데이터 형식 알려주는 헤더.

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글