@DataJpaTest란?
- JPA관련 구성 요소에 초점을 맞춘 데이터 액세스 계층 테스트
- 특징
- Application의 JPA에 필요한 Bean을 로드
- @Repository 어노테이션을 가진 Bean들을 자동 스캔
- 빠른 테스트 실행 속도
- 데이터 액세스 레이어에 집중하여 구체적인 테스트 가능
- in-memory embedded DB 사용 가능
- @TypeExcludeFilters
- Application 컨텍스트가 생성되는 동안 특정 타입의 빈을 제외시키는 역할을 합니다.
- DataJpaTypeExcludeFilter를 통해 JPA외의 @Controller, @Service, @Component 등과 같은 어노테이션이 달린 클래스를 컴포넌트 스캔 대상에서 제외시키는 동작을 수행합니다.
- @AutoConfigureDataJpa
- 테스트 환경에서 Data JPA를 자동으로 구성하는 역할을 합니다.
- EntityManagerFactory를 생성하여 Entity를 관리
- 테스트코드에서 Transaction 관리
- Hibernate와 같은 JPA 구현체에 대한 구성을 수행
- JPA Repository를 스캔하고 Application 컨텍스트에 등록
- @AutoConfigureTestDatabase
- @DataJpaTest는 기본적으로 내장된 메모리 데이터베이스를 사용하지만 해당 어노테이션을 사용하여 설정을 재정의 할 수 있습니다.
- replace: 어떤 유형의 데이터소스가 테스트 데이터소스로 교체될지 결정 3가지 속성 존재
- ANY: 기본값으로 어떤 데이터소스가 설정되더라도 테스트 데이터소스로 교체
- AUTO_CONFIGURED: SpringBoot에 의해 자동 구성된 데이터소스만 대체, 개발자가 구성한 데이터소스는 그대로 두고 SpringBoot가 자동으로 구성한 데이터소스만 테스트 데이터소스로 교체
- NONE: 어떠한 데이터소스도 테스트 데이터소스로 대체X, 개발자가 구성한 데이터소스 설정을 그대로 사용
- 기본 내장 메모리 데이터베이스 (H2, DERBY, HSQLDB)외에 외부에서 물리적으로 데이터베이스 사용 시 (MySQL 등) 해당 테스트에 아래의 설정이 필요합니다.
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
- @Transactional
@DataJpaTest는 기본적으로 @Transactional상태이며 따로 @Rollback(value = false)를 주지 않으면 테스트가 끝난 후 자동적으로 롤백처리가 됩니다.
@SpringBootTest와의 차이점
@DataJpaTest
- JPA 엔티티, Repository 계층의 테스트
- 데이터베이스 Transaction 및 쿼리 성능 테스트
- 오직 JPA 관련 구성요소만 로드
@SpringBootTest
- 전체 Application 흐름을 테스트하고자 할 때
- 여러 Bean 간의 상호작용을 검증하고 싶을 때
- 전체 Spring Application 컨텍스트 로드
정리
@DataJpaTest, @SpringBootTest의 가장 큰 차이점은 각각의 사용목적에 있습니다.
데이터 액세스 레이어에 집중하는 경우 @DataJpaTest (단위 테스트)
Application의 전체적인 통합 테스트를 하는 경우 @SpringBootTest (통합 테스트)
'Spring' 카테고리의 다른 글
[Spring] Redis를 사용한Session 로그인 구현, Security없이 인증, 인가 구현 (26) | 2024.11.14 |
---|---|
[Spring] offset, no offset 차이점과 페이지네이션 구현예제 (6) | 2024.10.23 |
[Spring] RequestBody, Response의 값이 null 일 때, JSON의 직렬화 역직렬화 (0) | 2024.10.10 |
[Spring]@DataJpaTest를 이용한 테스트코드 작성 deleteAll? deleteAllInBatch? (0) | 2024.08.26 |
[Spring] Spring IOC, DI, DL 이란? (0) | 2024.07.27 |