728x90
학습 목표
- 슬라이스 테스트(Slice Testing)의 의미를 이해할 수 있다.
슬라이드 테스트란?
단위 테스트의 경우 일반적으로 특정 모듈이나 계층, 기술에 의존적이지 않도록 작성하는 것이 좋다 그런데 단위 테스트만으로는 애플리케이션의 모든 기능이 정상적으로 동작한다고 볼 순 없다.
하나의 애플리케이션은 계층별로 역할이 있고, 계층별로 서로 연동되기 때문에 각각의 계층 별로 잘 작동하는지 테스트를 진행한 후에 마지막으로 통합 테스트를 통해 계층 간의 연동에 문제가 없는지 확인해야 개발자의 테스트 작업이 마무리되는 것이라 할 수 있다.
각 계층에 구현해 놓은 기능들이 잘 작동하는지 특정 계층만 잘라서 테스트하는 것을 슬라이스 테스트라고 한다.
애플리케이션의 특정 수정 사항으로 인해 영향을 받을 수 있는 범위에 한해서 제한된 테스트를 진행하는데 이를 스모크 테스트라고 부른다.
- Spring에서 지원하는 테스팅 기능을 이용해서 API 계층의 Controller를 테스트할 수 있다.
API 계층 테스트
API 계층의 테스트 대상은 대부분 클라이언트의 요청을 받아들이는 핸들러인 Controller이다 Spring에서는 Controller를 테스트하기 위한 편리한 방법들을 제공한다.
Spring Boot에서는 API계층의 Controller를 테스트하기 위한 다양한 애너테이션을 제공하는데, 하나의 Controller 클래스를 테스트 하기 위한 테스트 클래스의 기본구조는 다음과 같다.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
@SpringBootTest // (1)
@AutoConfigureMockMvc // (2)
public class ControllerTestDefaultStructure {
// (3)
@Autowired
private MockMvc mockMvc;
// (4)
@Test
public void postMemberTest() {
// given (5) 테스트용 request body 생성
// when (6) MockMvc 객체로 테스트 대상 Controller 호출
// then (7) Controller 핸들러 메서드에서 응답으로 수신한 HTTP Status 및 response body 검증
}
}
- 1)의 @SpringBootTest 애너테이션은 Spring Boot 기반의 애플리케이션을 테스트하기 위한 Application Context를 생성한다.
Application Context에는 애플리케이션에 필요한 Bean 객체들이 등록되어 있다. - 2)의 @AutoConfigureMockMvc 애너테이션은 Controller 테스트에 필요한 애플리케이션의 구성이 자동으로 진행된다.
3)의 MockMvc 같은 기능을 사용하기 위해서는 반드시 필요. - 3)에서 DI로 주입받은 MockMvc는 Tomcat 같은 서버를 실행하지 않고 Spring 기반 애플리케이션의 Controller를 테스트할 수 있는 완벽할 환경을 지원해주는 일종의 Spring MVC 테스트 프레임워크이다.
MockMVC 객체를 통해 작성한 Controller를 호출해서 손쉽게 Controller에 대한 테스트를 진행할 수 있다. - 1),2),3)을 통해 Controller를 테스트할 준비가 되었다.
- Postman을 사용해서 Controller에 요청을 하기 위해서는 Request Body 데이터가 필요하다. Controller를 테스트하기 위해서는 5)의 단계에서 테스트용 reuest body를 직접 만들어주어야 한다.
- 6)에서는 MockMVC 객체를 통해 요청 URI와 HTTP 메서드 등을 지정하고, 5)에서 만든 테스트용 request body를 추가한 뒤에 request를 수행한다
- 7)에서는 Controller에서 전달받은 HTTP Status와 response body 데이터를 통해 검증 작업을 진행한다.
- Spring에서 지원하는 테스팅 기능을 이용해서 데이터 액세스 계층의 Repository를 테스트할 수 있다.
Point
- 개발자가 각 계층에 구현해 놓은 기능들이 잘 동작하는지 특정 계층만 잘라서(Slice) 테스트하는 것을 슬라이스 테스트(Slice Test)라고 한다.
- @SpringBootTest 애너테이션은 Spring Boot 기반의 애플리케이션을 테스트 하기 위한 Application Context를 생성한다.
- @AutoConfigureMockMvc 애너테이션은 Controller 테스트를 위한 애플리케이션의 자동 구성 작업을 해준다.
- MockMvc는 Tomcat 같은 서버를 실행하지 않고 Spring 기반 애플리케이션의 Controller를 테스트할 수 있는 완벽한 환경을 지원해주는 일종의 Spring MVC 테스트 프레임워크이다
- MockMvc로 테스트 대상 Controller의 핸들러 메서드에 요청을 전송하기 위해서는 기본적으로 perform() 메서드를 먼저 호출해야 한다.
- MockMvcRequestBuilders 클래스를 이용해서 빌더 패턴을 통해 request 정보를 채워 넣을 수 있다.
- MockMvc의 perform() 메서드가 리턴하는 ResultActions 타입의 객체를 이용해서 request에 대한 검증을 수행할 수 있다.
728x90
'TIL' 카테고리의 다른 글
[SpringMVC][TDD] (0) | 2022.11.10 |
---|---|
[Spring MVC][Mockito] (0) | 2022.11.10 |
[JUnit으로 비즈니스 로직에 단위 테스트 적용하기] (0) | 2022.11.09 |
[Spring][Hamcrest] (0) | 2022.11.09 |
[Spring MVC][Testing] (0) | 2022.11.08 |