BE/Spring & Spring Boot

[Spring Boot] MockMvc

baek-dev 2025. 1. 20. 18:48

MockMvc란?

 

MockMvc는 Spring Boot에서 제공하는 테스트 유틸리티임.

Spring MVC 애플리케이션의 컨트롤러를 서버를 띄우지 않고도 테스트할 수 있도록 지원함.

실제 HTTP 요청을 보내지 않고, 가상으로 요청 및 응답을 처리함.


MockMvc의 주요 특징

1. 가상 HTTP 요청 처리

Mock 환경에서 컨트롤러 로직을 테스트할 수 있음.

실제 서버 없이도 HTTP 요청/응답의 동작을 확인 가능함.

 

2. 완전한 Spring 컨텍스트 지원

MockMvc는 Spring의 DI(의존성 주입)와 컨텍스트를 활용해 컨트롤러 및 관련 빈을 로드함.

 

3. Rest API 테스트 가능

GET, POST, PUT, DELETE 등의 HTTP 메서드와 다양한 요청 파라미터를 테스트할 수 있음.


사용 방법

 

MockMvc는 주로 JUnit과 함께 사용됨.

 

1. 설정

테스트 클래스에서 MockMvc를 생성하고 초기화함.

@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetEndpoint() throws Exception {
        mockMvc.perform(get("/api/example")) // GET 요청
                .andExpect(status().isOk()) // 상태 코드 200 확인
                .andExpect(content().string("Hello, World")); // 응답 내용 확인
    }
}

 

2. 요청 생성

 

perform() 메서드로 HTTP 요청을 생성하고 테스트함.

요청 방식: get(), post(), put(), delete() 등을 사용함.


주요 메서드

 

1. perform(RequestBuilder requestBuilder)

요청을 생성하고 실행함.

mockMvc.perform(get("/api/example"));

 

2. andExpect(ResultMatcher matcher)

응답의 상태 코드, 헤더, 본문 등을 검증함.

mockMvc.perform(get("/api/example"))
        .andExpect(status().isOk())
        .andExpect(content().json("{\"key\":\"value\"}"));

 

3. andDo(ResultHandler handler)

실행 결과를 로깅하거나 추가 작업을 수행함.

mockMvc.perform(get("/api/example"))
        .andDo(print()); // 요청/응답 로그 출력

 

4. param(String name, String… values)

요청 파라미터를 추가함.

mockMvc.perform(get("/api/example")
        .param("key", "value"));

 

5. header(String name, String value)

요청 헤더를 추가함.

mockMvc.perform(get("/api/example")
        .header("Authorization", "Bearer token"));

MockMvc의 장점

1. 빠른 테스트: 서버를 띄우지 않으므로 테스트 속도가 빠름.

2. HTTP 요청/응답 시뮬레이션: 실제 요청을 보내지 않고도 컨트롤러 로직을 확인할 수 있음.

3. 통합 테스트: 컨트롤러와 관련된 서비스, 리포지토리 로직까지 포함해 전체 흐름을 검증할 수 있음.

 

 

 

 

출처 : ChatGPT