Spring MockMvc는 Spring MVC 애플리케이션을 테스트하는 데 사용되는 강력한 도구입니다. 이를 통해 실제 서버를 시작하지 않고도 MVC 애플리케이션의 웹 계층을 테스트할 수 있습니다. MockMvc는 주로 Controller의 동작을 검증하는 데 사용되며, 요청을 시뮬레이션하고 응답을 검증할 수 있게 해줍니다.
개념과 목적
MockMvc는 Spring의 테스트 모듈 중 하나로, HTTP 요청과 응답을 모킹(mocking)하여 컨트롤러 레이어를 테스트할 수 있도록 합니다. 실제 서블릿 컨테이너를 실행하지 않고도 Spring MVC 애플리케이션의 웹 계층을 테스트할 수 있습니다.
- 신속한 피드백: 빠르게 테스트를 실행하여 피드백을 받을 수 있습니다.
- 서버 독립적 테스트: 실제 서버를 시작하지 않고도 테스트할 수 있어 개발 환경에 구애받지 않습니다.
- 자동화된 테스트: 다양한 요청과 응답을 쉽게 시뮬레이션하여 테스트 자동화를 지원합니다.
Controller 내의 흐름
MockMvc를 사용한 테스트는 보통 다음과 같은 흐름으로 진행됩니다.
- MockMvc 설정: MockMvc 객체를 초기화합니다.
- 요청 전송: MockMvc를 통해 HTTP 요청을 보냅니다.
- 응답 검증: 반환된 응답을 검증합니다.
@RunWith(SpringRunner.class)
@WebMvcTest(YourController.class)
public class YourControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testGetEndpoint() throws Exception {
mockMvc.perform(get("/your-endpoint"))
.andExpect(status().isOk())
.andExpect(content().string("Expected response"));
}
}
주요 메서드 예시 및 어노테이션
주요 메서드
perform()
: 요청을 실행합니다.andExpect()
: 응답에 대한 기대치를 설정합니다.andDo()
: 요청 후 추가 작업을 수행합니다(예: 결과 로깅).
예시
mockMvc.perform(get("/users/1"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.name").value("John Doe"));
어노테이션
@RunWith(SpringRunner.class)
: 테스트가 Spring의 테스트 컨텍스트 프레임워크에서 실행되도록 설정합니다.@WebMvcTest
: 특정 컨트롤러를 테스트하기 위해 사용합니다. 해당 컨트롤러와 관련된 빈만 로드됩니다.@Autowired
: 필요한 빈을 주입받기 위해 사용됩니다.
자세한 설명
MockMvc 설정
MockMvc는 일반적으로 @WebMvcTest
와 함께 사용됩니다. @WebMvcTest
는 컨트롤러 레이어만 로드하기 때문에 다른 빈들로 인한 영향을 받지 않고 순수하게 컨트롤러 레이어를 테스트할 수 있습니다.
@RunWith(SpringRunner.class)
@WebMvcTest(YourController.class)
public class YourControllerTest {
@Autowired
private MockMvc mockMvc;
}
요청 전송
perform()
메서드를 사용하여 요청을 전송합니다. 이 메서드는 다양한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 지원합니다.
mockMvc.perform(get("/api/resource"))
.andExpect(status().isOk());
응답 검증
andExpect()
메서드를 사용하여 응답의 상태, 헤더, 본문 등을 검증할 수 있습니다. 여러 andExpect()
호출을 연결하여 다양한 검증을 할 수 있습니다.
mockMvc.perform(get("/api/resource"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.id").value(1));
MockMvc를 사용하면 Spring MVC 애플리케이션의 컨트롤러 레이어를 효과적으로 테스트할 수 있습니다. 이를 통해 코드의 신뢰성을 높이고, 리팩토링 시 발생할 수 있는 오류를 미연에 방지할 수 있습니다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Boot Test에서 JsonPath 사용하기 (0) | 2024.06.21 |
---|---|
[Spring Boot] @ControllerAdvice 중앙 집중식 예외 처리 (0) | 2024.06.20 |
[Spring Boot] @RequiredArgsConstructor (0) | 2024.02.12 |
[Spring Boot] @Repository, @Service 어노테이션 (0) | 2024.01.20 |
[Spring Boot] Thymeleaf(타임리프) 란? (0) | 2024.01.20 |