어노테이션 | 설명 | 부모 클래스 | Bean |
@SpringBootTest | 통합테스트, 전체 | IntegrationTest | Bean 전체 |
@WebMvcTest | 단위테스트, MVC테스트 | MockApiTest | MVC관련된 Bean |
@DataJpaTest | 단위테스트, Jpa테스트 | RepositoryTest | JPA 관련 Bean |
None | 단위테스트, Service테스트 | MockTest | None |
None | POJO, 도메인 테스트 | None | None |
통합 테스트
장점
- 모든 Bean을 올리고 테스트를 진행하기 때문에 쉽게 테스트 진행 가능
- 모든 Bean을 올리고 테스트를 진행하기 때문에 운영환경과 가장 유사하게 테스트 가능
- API를 테스트할 경우 요청부터 응답까지 전체적인 테스트 진행 가능
단점
- 모든 Bean을 올리고 테스트를 진행하기 때문에 테스트 시간이 오래 걸림
- 테스트의 단위가 크기 때문에 테스트 실패시 디버깅이 어려움
- 외부 API 콜같은 Rollback 처리가 안되는 테스트 진행을 하기 어려움
단위 테스트
장점
- 진행하고자 하는 테스트에만 집중할 수 있습니다.
- 테스트 진행시 중요 관점이 아닌 것들은 Mocking 처리해서 외부 의존성들을 줄일 수 있습니다.
- 예를 들어 주문 할인 로직이 제대로 동작하는지에 대한 테스트만 진행하지 이게 실제로 데이터베이스에 insert되는지는 해당 테스트의 관심사가 아닙니다.(Repository Test가 아닐 경우)
- 테스트 속도가 빠릅니다.
단점
- 의존성 있는 객체를 Mocking 하기 때문에 문제가 완결된 테스트는 아닙니다.
- Mocking 하기가 귀찮습니다.
아직까지 코드에 대한 완전한 확신이 없기 때문에 필자는 단위 테스트보다 통합테스트를 지향합니다. 단위 테스트를 나눠 3개의 테스트를 구현하는 것보다 테스트의 시간이 오래걸리지만 생산비용이 적은 당분간 통합테스트만 구현할 예정입니다.
참고: https://github.com/cheese10yun/spring-guide/blob/master/docs/test-guide.md#integrationtest
'테스트' 카테고리의 다른 글
🙊 Fixture Monkey 도입 (1) | 2024.12.19 |
---|---|
(나만을 위한)댓글 생성 메소드 테스트 구현 고민과정 (0) | 2024.04.07 |
테스트코드 작성시 유념사항 (1) | 2024.04.07 |
[Trasactional] 자바 스케줄러 테스트 시도 과정 (0) | 2024.03.28 |