AutoConfigureMockMvc

Soobin Kim·2024년 11월 21일

Spring

목록 보기
2/2

@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
addFiltersSpring Security와 같은 필터를 추가할지 여부를 결정, 기본값은 true.
print테스트 실패 시 요청/응답을 출력, 기본값은 false.
@AutoConfigureMockMvc(secure = false, addFilters = false)
public class ExampleControllerTest {
    // 보안 및 필터가 비활성화된 MockMvc를 테스트에 사용
}

언제 사용할까?

  1. 통합 테스트를 통해 요청/응답 전체를 검증하고 싶을 때.
  2. 컨트롤러 계층만 슬라이스 테스트하고 싶을 때.
  3. MockMvc 객체를 직접 생성하거나 설정하는 번거로움을 피하고 싶을 때.

주의점

  • DB와 연관된 서비스 로직을 테스트하려면 @DataJpaTest와 같은 다른 어노테이션이 필요할 수 있다.
  • 전체 컨텍스트를 로드하는 경우 테스트 속도가 느려질 수 있다. 이를 최소화하려면 @WebMvcTest를 선택할 수 있다.

0개의 댓글