Spring 프레임워크는 강력한 웹 애플리케이션 개발을 지원하며, 테스트를 통해 코드의 품질을 높이는 데 큰 도움이 됩니다.
이 글에서는 웹 애플리케이션을 테스트하기 위한 두 가지 주요 도구인 MockMvc와 WebTestClient에 대해 소개하겠습니다.
⭐ 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
'기술 지식 쌓아가기 📚 > Backend 🍔' 카테고리의 다른 글
[Cloud] MSA vs 모놀리: 당신의 프로젝트에 적합한 아키텍처는? (1) | 2024.10.03 |
---|---|
[Spring] 웹 소켓, R 소켓, STOMP: 실시간 통신의 모든 것 🍃 (3) | 2024.10.02 |
[Spring] WebFlux: 비동기와 반응형 프로그래밍의 새로운 장 🍃 (3) | 2024.09.27 |
[Spring] 안전한 웹 개발의 시작: 스프링의 Validation, Data Binding, Type Conversion 🍃 (0) | 2024.09.27 |
[Spring] 스프링 MVC: 웹 개발의 기본, 쉽게 이해하기 🍃 (5) | 2024.09.22 |