[Spring] SpringBoot의 MockMvc 단위 테스트

민지·2024년 6월 5일
0

Spring

목록 보기
24/25
post-custom-banner

mockMvc ?

실제 객체와 비슷하지만 Controller 테스트에 필요한 기능만 가지는 가짜 객체를 만들어서 애플리케이션 배포하지 않아도 스프링 MVC 패턴 및 동작을 테스트 할 수 있는 클래스이다.

단위 테스트를 위해서는 MockMvc 라는 객체가 사용된다.
MockMvc 는 테스트를 위해 브라우저나 WAS 의 동작을 똑같이 처리해 줄 수 있는 환경이라고 생각하면 된다. MockMvc 를 이용해 브라우저에서 발생하는 요청을 가상으로 만들고 Controller 가 응답하는 내용을 기반으로 검증을 수행한다.

단위 테스트를 작성할 때 확인 할 내용들

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

mockMvc의 메소드

요청 만들기

1. perform : 요청, 가상의 request 를 처리함

요청은 MockMvcRequestBuilders 의 static 메소드인 get, post, put, delete 등을 이용해서 MockHttpServletRequestBuilder 객체를 생성하는 것에서 시작한다.

MockHttpServletRequestBuilder 는 ServletRequest 를 구성하기에 필요한 메소드를 제공한다.

get 요청을 전송한다. 결과로 ResultActions 객체를 받으며,
인자로는 경로를 보내주는데 HTTP 메소드를 결정할 수 있다. (get(), post(), put(), delete())
param / params 요청 파라미터를 설정한다.
header / headers 요청 헤더를 설정한다.
cookie 쿠키를 설정한다.
contentType Enum 인 MediaType 으로 요청의 컨텐트 타입을 설정한다.
file fileUpload 로 ServletRequestBuilder 를 생성한 경우 업로드 파일을 지정한다.
private final MockMvc mvc;

mvc.perform(get("/add"))



검증하기

2. expect : 결과, 가상의 response 에 대해 검증함

perform 의 결과로 받은 ResultActions 객체는 andExcpect() 메소드에 RequltMatcher 를 넘겨줘서 리턴 값을 검증하고 확인할 수 있다.

handler 요청에 매핑된 컨트롤러를 검증한다.
header 응답 헤더의 값을 검증한다.
cookie 응답을 통해 전달된 쿠키를 검증한다.
content 응답의 본문 내용을 검증한다.
view Controller 의 handler method 가 반환한 view 의 이름을 검증한다.
view().name("forward:/add") : 리턴하는 뷰 이름이 add 가 맞나?
model model 에 담긴 attribute 값을 검증한다.
forwardedUrl / forwardedUrlPattern forward 로 이동하는 대상의 경로를 검증한다.
redirectedUrl / redirectedUrlPattern redirect 로 이동하는 대상의 경로를 검증한다.
status Http 상태 코드를 이용해 검증한다.
isOk() : 200
isNotFound() : 404
isMethodNotAllowed() : 405
isInternalServerError() : 500
is(int status) : status 상태 코드
private final MockMvc mvc;

mvc.perform(get("/add"))
        .andExpect(status().isOk())
        .andExpect(view().name("forward:/add"))
        .andExpect(forwardedUrl("/add"))
        .andExpect(model().attribute("message", "어쩌고저쩌고"))



실행하기

3. do : 테스트 과정에서 콘솔 출력 등 직접 처리할 일을 작성함

ResultActions 객체의 andDo 메소드를 이용한다. 파라미터로 ResultHandler 를 전달하는데 MockMvcResultHandlers 에 static 메소드로 정의되어있다.

print 실행 결과를 출력한다.
요청/응답 전체 메세지를 확인할 수 있다.
private final MockMvc mvc;

mvc.perform(get("/add"))
        .andExpect(status().isOk())
        .andDo(MockMvcResultHandlers.print());
profile
개발일지
post-custom-banner

0개의 댓글