클라이언트 단에서 GET 요청을 할 시, Controller -> Service -> DAO -> MyBatis 쿼리를 실행하는 루틴을 테스트해야 하는 상황이었다. 테스트 환경에서는 실제 조회시와는 다르게 Controller로 요청이 날아오지 않기 때문에, 테스트를 위한 가짜 요청이 필요했고 이를 MockMVC가 담당하였다.
MockMVC란
개발한 웹 프로그램을 실제 서버에 배포하지 않고도 테스트를 위한 요청을 제공하는 수단이다. MockMVC를 사용하면, 웹 서버를 실행하지 않고도 DispatcherServlet을 초기화할 수 있다. 따라서, 테스트 환경에서도 실제 서버를 실행하는 것과 동일한 테스트를 진행할 수 있다.
MockMVC를 이용한 테스트
아래와 같은 테스트용 컨트롤러가 있다고 해보자.
@RestController
public class postsListController {
@RequestMapping("/postsList")
public String getPostsList() {
return "This will return posts's URI.";
}
}위의 컨트롤러를 테스트해 보기 위해 다음과 같은 테스트 코드를 작성하였다.
@Autowired
postsListController postsListController;
@Autowired
private MockMvc mockMvc;
@Test
public void getPostsList() throws Exception {
mockMvc.perform(
MockMvcRequestBuilders.get("/postsList"))
.andExpect(status().isOk())
.andExpect(content().string("This will return posts's URI."))
;
}MockMvcRequestBuilders.get() 메소드를 통해 GET 요청을 보내고, andExpect() 메소드를 통해 응답을 검증한다.
