@AutoConfigureMockMvc는 Spring Boot에서 테스트를 쉽게 하기 위해 제공하는 어노테이션이다. 주로 Spring MVC의 컨트롤러 테스트를 할 때 사용되며, MockMvc를 자동으로 설정하고 주입해준다. 이를 통해 컨트롤러 계층을 별도로 실행하지 않고도 요청과 응답을 모킹하여 테스트할 수 있다.
MockMvc를 직접 설정하는 경우와 그 문제점
MockMvc객체를 수동으로 생성하고, 컨트롤러를 수동으로 주입하거나, 의존성들을 수동으로 모킹(mocking)해야 하므로 이를 통해 테스트 환경을 구성하는 데 많은 코드가 필요하고, 번거로운 설정 작업이 동반된다.
@SpringBootTest
@AutoConfigureMockMvc
public class ExampleControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testExampleEndpoint() throws Exception {
mockMvc.perform(get("/example")) // 요청
.andExpect(status().isOk()) // 응답 상태 확인
.andExpect(content().string("Hello World")); // 응답 내용 확인
}
}
@SpringBootTest:
전체 컨텍스트를 로드하여 통합 테스트 환경에서 MockMvc를 사용할 수 있다.
@WebMvcTest:
컨트롤러 계층만 로드하고, 서비스나 리포지토리는 Mock으로 대체하므로 빠른 테스트에 적합.
@WebMvcTest(controllers = ExampleController.class)
@AutoConfigureMockMvc
public class ExampleControllerSliceTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testExampleEndpoint() throws Exception {
mockMvc.perform(get("/example"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World"));
}
}
@AutoConfigureMockMvc에는 몇 가지 유용한 옵션이 있다.
| 옵션 | 설명 |
|---|---|
secure | 보안이 활성화된 상태로 MockMvc를 설정. 기본값은 true |
addFilters | Spring Security와 같은 필터를 추가할지 여부를 결정, 기본값은 true. |
print | 테스트 실패 시 요청/응답을 출력, 기본값은 false. |
@AutoConfigureMockMvc(secure = false, addFilters = false)
public class ExampleControllerTest {
// 보안 및 필터가 비활성화된 MockMvc를 테스트에 사용
}
@DataJpaTest와 같은 다른 어노테이션이 필요할 수 있다.@WebMvcTest를 선택할 수 있다.