Test ‐ 테스트 코드 원칙 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 테스트 전략 정리
어노테이션 |
설명 |
부모 클래스 |
Bean |
@SpringBootTest |
통합 테스트, 전체 |
IntegrationTest |
Bean 전체 |
@WebMvcTest |
단위 테스트, Mvc 테스트 |
MockApiTest |
MVC 관련된 Bean |
@DataJpaTest |
단위 테스트, Jpa 테스트 |
RepositoryTest |
JPA 관련 Bean |
None |
단위 테스트, Service 테스트 |
MockTest |
None |
None |
POJO, 도메인 테스트 |
None |
None |
📚 통합 테스트
장점
- 모든 빈을 올리고 테스트를 진행하기 때문에 쉽게 테스트를 할 수 있다.
- 모든 빈을 올리고 테스트를 진행하기 때문에 운영 환경과 가장 유사한 환경에서 테스트를 할 수 있다.
- API를 테스트할 경우 요청부터 응답까지 전체적인 테스트가 가능하다.
단점
- 모든 빈을 올리기 때문에 테스트 시간이 오래 걸린다.
- 테스트 단위가 크기 때문에 테스트 실패 시 디버깅이 어렵다.
- 외부 API 콜과 같은 롤백 처리가 어려운 부분에 대해선 테스트 진행이 어렵다.
📚 리포지토리 테스트
장점
- 리포지토리와 관련된 빈들만 등록하기 때문에 통합 테스트에 비해서 빠르다.
- 리포지토리에 대한 관심사만 가지기 때문에 테스트 범위가 다른 테스트에 비해서 좁다.
단점
- 테스트 범위가 작기 때문에 실제 환경과 차이가 발생한다.
@DataJpaTest
어노테이션을 통해서 리포지토리에 대한 빈만 등록한다.
@DataJpaTest
어노테이션 내부를 들여다보면 다음과 같다.
📚 @DataJpaTest
@DataJpaTest
의 경우 기본적으로 임베디드 DB를 사용하고 있고 @Transactional
어노테이션이 포함되어 있어 롤백도 가능하다.
@AutoConfigureTestDatabase
어노테이션을 통해서 profile에 등록된 데이터베이스 정보로 대체할 수 있다.