seok의 패치노트
Junit MockMvc 테스트 본문
MockMvc 란?
Controller를 호출해주는 도구로써 Junit 테스트 시 필요로 한다 만약 MockMvc 유틸리티 클래스를 사용하지 않는다면 Postman이나 직접 웹브라우저에서 테스트를 하며 디버깅을 해야 하지만 MockMvc를 사용하면 쉽게 테스트를 할 수 있다.
MockMvc 테스트 방법
@WebMvcTest만 사용하는 방법이 있고 @SpringBootTest과 같이 사용하는 방식이 있다
@SpringBootTest를 사용하게 되면 ApplicationContext 전체를 불러오기에 Bean으로 등록된 모든 객체를 메모리에 미리 올려두고 테스트할 수 있다 만약 Bean을 미리 등록할 필요 없다면 @WebMvcTest 만 사용하면 되고 아니라면
@SpringBootTest와 @AutoConfigureMockMvc를 같이 써야 한다.
1. 먼저 MockMvc 객체를 @Autowired를 사용하여 주입받는다.(@WebMvcTest가 MockMvc 의존성을 제공함)
2. 테스트 케이스를 작성한다.
- andExpect -> 호출 결과 기댓값을 지정하는 메서드( contentType , content , json 등 결괏값에 대한 기댓값 판단 가능)
- perform -> 호출할 컨트롤러 요청을 처리함(contentType , content , params 등 파라미터를 같이 넣어 테스트 가능)
- andDo -> 요청에 대한 처리를 할 경우 사용한다 (보통 print()를 호출하여 summary 보는걸 일반적으로 사용)
- andReturn -> 결과를 객체로 받을 때 사용한다.(MvcResult 타입으로 받게 됨)
3. MockMvcResutMatchers , MockMvcResultHandlers 등 static import 하기 (필수는 아니지만 편의성 및 가독성을 위해)
** 요청 시 파라미터를 같이 넣어보고 jsonPath로 기댓값 판단해보기
아래 이미지에 요청 결과는
{
"code" : "400",
"message" : "잘못된 요청입니다.",
"validation" : {
"title" : "타이틀을 입력해주세요"
}
}
형태로 요청 결과 데이터를 넘겨받았을 경우에 대한 테스트 케이스이다.
json값에 대한 기댓값을 판단하기 위해서는 jsonPath 메서드를 사용해야 하며 $. 키값으로 결과 json 객체를 불러오고value로 값을 판단하면 된다!
추가로 json값을 편하게 넘기기 위해 ObjectMapper의 writeValueAsString를 사용하여 객체를 json 형태로 만들어서 사용했다.