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에 등록된 데이터베이스 정보로 대체할 수 있다.