기술 지식 쌓아가기 📚/Backend 🍔

[Spring] 웹 애플리케이션 테스트를 위한 Spring의 두 가지 도구: MockMvc와 WebTestClient 🍃

코양이🤍 2024. 9. 28. 20:40

Spring 프레임워크는 강력한 웹 애플리케이션 개발을 지원하며, 테스트를 통해 코드의 품질을 높이는 데 큰 도움이 됩니다.

이 글에서는 웹 애플리케이션을 테스트하기 위한 두 가지 주요 도구인 MockMvcWebTestClient에 대해 소개하겠습니다.

 

⭐ MockMvc란?

MockMvc는 Spring MVC의 웹 애플리케이션을 테스트하기 위한 강력한 도구입니다.

실제 서버를 실행하지 않고도 HTTP 요청을 테스트할 수 있습니다.

이를 통해 컨트롤러의 동작을 쉽게 검증할 수 있습니다.

✅ MockMvc 사용 예시 코드

@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
public class MyControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetExample() throws Exception {
        mockMvc.perform(get("/example"))
               .andExpect(status().isOk())
               .andExpect(content().string(containsString("Hello, World!")));
    }
}

위의 예시에서 MockMvc를 사용하여 /example 경로로 GET 요청을 보내고, 응답 상태가 200(OK)인지, 그리고 응답 내용에 "Hello, World!"가 포함되어 있는지를 확인합니다.

 

⭐ WebTestClient란?

WebTestClient는 비동기 및 반응형 웹 애플리케이션을 테스트하기 위한 도구입니다.

WebFlux와 함께 사용할 수 있으며, 비동기 요청과 응답을 쉽게 처리할 수 있습니다.

✅ WebTestClient 사용 예시 코드

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class MyReactiveControllerTest {

    @Autowired
    private WebTestClient webTestClient;

    @Test
    public void testGetReactiveExample() {
        webTestClient.get().uri("/reactive-example")
                     .exchange()
                     .expectStatus().isOk()
                     .expectBody(String.class)
                     .isEqualTo("Hello, Reactive World!");
    }
}

이 예시에서는 /reactive-example 경로로 GET 요청을 보내고, 응답 상태와 본문을 검증합니다.

WebTestClient는 비동기 요청을 처리하는 데 적합합니다.

 

⭐ MockMvc와 WebTestClient의 차이점

 

  • 동기 vs 비동기: MockMvc는 동기 웹 애플리케이션 테스트에 적합하고, WebTestClient는 비동기 웹 애플리케이션을 테스트하는 데 사용됩니다.
  • 용도: MockMvc는 주로 Spring MVC 기반 애플리케이션에 사용되며, WebTestClient는 Spring WebFlux 기반 애플리케이션에서 사용됩니다.
  • 서버 실행 여부: MockMvc는 실제 서버를 실행하지 않고도 테스트를 수행할 수 있지만, WebTestClient는 서버를 실행해야 합니다.

 

🚩 결론

Spring의 MockMvc와 WebTestClient는 각각의 요구 사항에 맞춰 웹 애플리케이션을 테스트하는 데 매우 유용한 도구입니다. 이 두 가지 도구를 적절히 활용하면 애플리케이션의 품질을 높이고, 버그를 조기에 발견하여 안정적인 서비스를 제공할 수 있습니다. 이제부터 효과적으로 테스트를 진행해 보세요~!!!

 

📌 참고

 

 

Testing :: Spring Framework

This chapter covers Spring’s support for integration testing and best practices for unit testing. The Spring team advocates test-driven development (TDD). The Spring team has found that the correct use of inversion of control (IoC) certainly does make bo

docs.spring.io