본문 바로가기
테스트

통합, 단위 테스트 차이

by 순원이 2023. 10. 13.
어노테이션 설명  부모 클래스  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