MockMvc를 사용한 API 테스트
Spring MVC 애플리케이션에서 API를 작성할 때, MockMvc를 사용하여 API의 테스트를 수행할 수 있습니다.
MockMvc를 사용하면, API를 실제로 호출하지 않고도 API의 동작을 시뮬레이션하여 API의 동작을 검증할 수 있습니다.
이번 포스트에서는 MockMvc를 사용하여 API를 테스트하는 방법에 대해 알아보겠습니다.
MockMvc 설정
MockMvc를 사용하려면, 먼저 MockMvc를 초기화해야 합니다.
MockMvc는 Spring MVC의 구성 요소를 사용하여 동작하므로, 애플리케이션의 ApplicationContext를 사용하여 MockMvc를 초기화해야 합니다.
아래는 MockMvc를 초기화하는 예제 코드입니다.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
// ...
}
@AutoConfigureMockMvc 어노테이션을 사용하여 MockMvc를 자동으로 구성합니다.
이렇게 하면, 애플리케이션의 ApplicationContext가 로드되고, 이를 사용하여 MockMvc가 구성됩니다.
API 호출
MockMvc를 사용하여 API를 호출하려면, MockMvc.perform() 메서드를 사용합니다.
MockMvc.perform() 메서드는 MockHttpServletRequestBuilder 객체를 인자로 받습니다.
MockHttpServletRequestBuilder 객체는 API 호출을 나타내며, HTTP 메서드, URL, 요청 본문, 요청 헤더 등을 설정할 수 있습니다.
아래는 MockMvc.perform() 메서드를 사용하여 API를 호출하는 예제 코드입니다.
@Test
public void testMyApi() throws Exception {
mockMvc.perform(get("/my-api"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.data").exists());
}
위 예제 코드에서는 /my-api URL에 GET 요청을 수행하고, 반환된 HTTP 상태 코드가 200인지, 반환된 콘텐츠 타입이 JSON인지, 반환된 JSON 데이터에 data 필드가 있는지 검증합니다.
요청 본문
MockMvc를 사용하여 POST 또는 PUT 요청을 수행할 때는 요청 본문을 설정해야 합니다.
요청 본문은 content() 메서드를 사용하여 설정할 수 있습니다.
아래는 요청 본문을 설정하는 예제 코드입니다.
String requestBody = "{\"name\":\"Alice\",\"age\":20}";
mockMvc.perform(post("/my-api")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isOk());
위 예제 코드에서는 POST 요청을 수행하고, 요청 본문으로 {"name":"Alice","age":20} JSON 문자열을 전달하고 있습니다. contentType() 메서드를 사용하여 요청 본문의 콘텐츠 타입을 설정합니다.
요청 헤더
MockMvc를 사용하여 API를 호출할 때는 요청 헤더를 설정할 수도 있습니다. 요청 헤더는 header() 메서드를 사용하여 설정할 수 있습니다. 아래는 요청 헤더를 설정하는 예제 코드입니다.
mockMvc.perform(get("/my-api")
.header("Authorization", "Bearer " + accessToken))
.andExpect(status().isOk());
위 예제 코드에서는 Authorization 헤더를 설정하여 API 호출을 인증합니다.
응답 검증
MockMvc를 사용하여 API를 호출하면, 반환된 응답을 검증할 수 있습니다. 반환된 응답은 andExpect() 메서드를 사용하여 검증합니다. 아래는 반환된 JSON 데이터의 필드 값을 검증하는 예제 코드입니다.
mockMvc.perform(get("/my-api"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.data.name").value("Alice"))
.andExpect(jsonPath("$.data.age").value(20));
위 예제 코드에서는 반환된 JSON 데이터의 name 필드 값이 "Alice"인지, age 필드 값이 20인지 검증합니다.
결론
이번 포스트에서는 MockMvc를 사용하여 API를 테스트하는 방법에 대해 알아보았습니다.
MockMvc를 사용하면, API를 호출하지 않고도 API의 동작을 시뮬레이션하여 API의 동작을 검증할 수 있습니다.
MockMvc를 사용하여 API를 테스트하는 것은 API를 작성할 때 필수적인 작업이므로, 애플리케이션 개발 시 이를 적극적으로 활용하는 것이 좋습니다.
'Spring' 카테고리의 다른 글
Spring Security: 강력한 웹 보안 프레임워크 (0) | 2023.03.16 |
---|---|
Spring Security [DelegatingFilterProxy, FilterChainProxy] (0) | 2023.03.16 |
Java Spring_@Builder (0) | 2023.03.05 |
Java Spring_ @Mapping (0) | 2023.03.05 |
Java Spring JPA (Cascade vs EntityManager.persist()) (0) | 2023.03.05 |