@SpringBootTest
통합 테스트를 위한 환경을 준비해주고, 모든 빈들을 스캔하고 애플리케이션 컨텍스트를 생성하여 테스트를 실행
설정할 수 있는 값
- value와 properties : 애플리케이션 실행에 필요한 프로퍼티를 key = value 형태로 추가
- args : 애플리케이션의 arguments로 값 전달
- classes : 애플리케이션 로딩할 때 사용되는 컴포넌트 클래스 정의
- webEnvironment : 웹 테스트 환경 설정(Enum) </aside>
webEnvironment의 Enum 값
MOCK
웹 기반의 애플리케이션 컨텍스트를 생성하지만 MOCK 환경으로 제공하여 내장 서버 시작X
웹 환경이 클래스 패스에 없다면 웹이 아닌 애플리케이션 컨텍스트 생성
웹 기반의 Mock 테스트를 위해 @AutoConfigureMockMvc 또는 @AutoConfigureWebTestClient와 함께 사용
RANDOM_PORT
웹 기반의 애플리케이션 컨텍스트를 생성하여 실제 웹 환경 제공
내장 서버도 실행되며 사용하지 않는 랜덤 포트를 listen
DEFINED_PORT
웹 기반의 애플리케이션 컨텍스트를 생성하고 실제 웹 환경 제공
내장 서버도 실행되며 지정된 포트(default 8080)를 listen
NONE
SpringApplication으로 애플리케이션 컨텍스트 생성
웹 환경 제공 X </aside>
@SpringBootTest의 단점
- 기본적으로 모든 빈을 탐색하고 등록하기 때문에 불필요하게 무거워지고 시간이 오래 걸린다.
- 특정 계층만 테스트가 불가능
@WebMvcTest
손 쉽게 컨트롤러를 테스트할 수 있는 환경을 준비해주고, 내장된 서블릿 컨테이너가 랜덤 포트로 실행 즉 애플리케이션 컨텍스트를 만들 때 컨트롤러와 연관된 빈들만을 제한적으로 찾아서 등록한다.
@WebMvcTest에서 스캔 되는 애너테이션
- @Controller, @RestController
- @ControllerAdvice, @RestControllerAdvice
- @JsonComponent
- Filter
- WebMvcConfigurer
- HandlerMethodArgumentResolver </aside>
추가적인 설정이 필요하면 @Import를 사용 가능하고 @MockBean이나 @SpyBean 역시 사용 가능 또한 @WebMvcTest는 컨트롤러 테스트이므로 @WebMvcTest 내부에 @AutoConfigureMockMvc가 들어있다. 그러므로 @Autowired로 MockMvc를 주입받을 수 있으며, 만약 웹플럭스를 이용중이라면 @WebFluxTest를 사용하면 된다.
@Import(SecurityConfig.class)
@WebMvcTest(ArticleController.class)
class ArticleControllerTest {
}
- Import를 통해 Security 관련 추가 설정
- 특정 Controller 지정해서 테스트 가능
@DataJpaTest
JPA 레포지토리 테스트를 위해 사용. 기본적으로 @Entiry가 있는 엔티티 클래스들을 스캔
@Import(JpaConfig.class)
@DataJpaTest
class JpaRepositoryTest {
}
- @DataJpaTest에는 @Transactional 어노테이션이 들어있어서 기본적으로 모든 테스트가 롤백된다. 만약 롤백을 원하지 않는다면 @Rollback(false)를 추가
- 내장 데이터베이스가 클래스 패스에 존재한다면 내장 데이터베이스가 자동 구성된다. 만약 자동 구성을 원하지 않는다면 @AutoConfigureTestDatabase의 replace 속성을 NONE으로 설정
'그룹스터디' 카테고리의 다른 글
properties vs yaml (0) | 2023.01.27 |
---|---|
프로젝트 준비 1 - JPA, ResponseEntity를 활용하여 회원가입 연습하기 (0) | 2023.01.19 |
JPA Auditing (0) | 2022.12.30 |
일급 컬렉션(First Class Collection) (0) | 2022.12.23 |
XML Configuration vs Java Configuration (0) | 2022.12.14 |