@WebMvcTest

이규훈·2023년 9월 28일

@WebMvcTest는 Spring Boot 테스트 어노테이션 중 하나로, 주로 Spring MVC 웹 계층의 테스트에 사용됩니다. 이 어노테이션을 사용하면 웹 계층에 관련된 컴포넌트만을 로드하여 빠르게 테스트를 수행할 수 있습니다.

무엇인지:

  • @WebMvcTest는 Spring MVC의 특정 컨트롤러를 대상으로 한 테스트를 지원합니다.
  • 이 어노테이션을 사용하면 웹 계층에 필요한 구성만 로드되므로, 전체 애플리케이션 컨텍스트를 로드하는 것보다 테스트 속도가 빠릅니다.
  • 내장된 MockMvc 인스턴스를 사용하여 HTTP 요청과 응답을 쉽게 테스트할 수 있습니다.

언제 쓰는지:

  • Spring MVC 컨트롤러의 로직을 테스트할 때 사용합니다.
  • 서비스 계층, 데이터 액세스 계층, 외부 시스템과의 통신 등과 같은 다른 계층의 로직을 테스트하는 것이 아니라, 웹 계층의 로직만을 테스트하려는 경우에 사용합니다.

어떻게 쓰는지:

  1. 테스트 클래스에 @WebMvcTest 어노테이션을 추가합니다. 특정 컨트롤러를 대상으로 테스트하려면 해당 컨트롤러 클래스를 어노테이션의 값으로 전달할 수 있습니다.

    @WebMvcTest(SomeController.class)
  2. MockMvc를 주입받아 사용합니다. MockMvc는 HTTP 요청을 디스패처 서블릿에 전송하고 결과를 받아 테스트하는 데 사용됩니다.

    @Autowired
    private MockMvc mockMvc;
  3. 필요한 경우, @MockBean을 사용하여 서비스나 리포지토리와 같은 다른 빈들을 모의 객체로 생성하고 주입할 수 있습니다.

    @MockBean
    private SomeService someService;
  4. mockMvc 인스턴스를 사용하여 HTTP 요청을 수행하고 응답을 검증합니다.

    @Test
    public void someTest() throws Exception {
        mockMvc.perform(get("/someEndpoint"))
            .andExpect(status().isOk())
            .andExpect(content().string("Expected Content"));
    }

예제:

@RunWith(SpringRunner.class)
@WebMvcTest(SomeController.class)
public class SomeControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private SomeService someService;

    @Test
    public void testEndpoint() throws Exception {
        when(someService.someMethod()).thenReturn("Hello");

        mockMvc.perform(get("/someEndpoint"))
            .andExpect(status().isOk())
            .andExpect(content().string("Hello"));
    }
}

이렇게 @WebMvcTest를 사용하면 Spring MVC 웹 계층의 로직을 효과적으로 테스트할 수 있습니다.

profile
개발취준생

0개의 댓글