Why-Integration-Testing
1 통합 테스트를 하는 이유
- 단위 테스트가 비즈니스 로직을 확인하는 데 좋지만 비즈니스 로직을 외부와 단절된 상태로 확인하는 것으로 충분하지 않다
- 각 부분이 데이터베이스나 메시지 버스 등의 외부 시스템과 어떻게 통합되는지 확인해야 한다
2 통합 테스트는 무엇인가?
- 통합 테스트가 무엇인지 알기 위해선 먼저 단위 테스트가 무엇인지 알아야한다
2.1 단위 테스트란?
- 단위 테스트는 다음 세 가지 요구 사항을 충족하는 테스트다
- 단일 동작 단위를 검증하고
- 빠르게 수행하고
- 다른 테스트와 별도로 처리한다
2.2 통합 테스트란?
- 단위 테스트의 3 가지 요구 사항 중 하나라도 충족하지 못하는 테스트는 통합 테스트 범주에 속한다
- 따라서 단위 테스트가 아닌 모든 테스트가 통합 테스트에 해당된다
- 실제로 통합 테스트는 시스템이 프로세스 외부 의존성과 통합해 어떻게 동작하는지 검증한다
단위 테스트와 통합 테스트 비교
- 단위 테스트는 도메인 모델을 다루는 반면, 통합 테스트는 프로세스 외부 의존성과 도메인 모델을 연결하는 코드를 확인한다
2.3 테스트 피라미드
- 단위 테스트와 통합 테스트 간의 균형을 유지하는 것이 중요하다
- 균형을 유지한다는 것은 단위 테스트의 개수와 통합 테스트 개수의 균형을 맞추는 것
2.3.1 통합 테스트의 장단점
통합 테스트의 장점
- 코드를 더 많이 실행시켜 회귀 방지가 단위 테스트보다 우수하다
- 애플리케이션 코드, 라이브러리 코드를 모두 포함하기 때문
- 제품 코드와의 결합도가 낮아 리팩터링 내성도 우수하다
통합 테스트의 단점
- 통합 테스트가 외부 의존성에 직접 작동하며 느려지며, 이러한 테스트는 유지비가 많이 든다
- 유지비 증가의 이유
- 프로세스 외부 의존성 운영이 필요
- 관련된 협력자가 많아 테스트가 비대해짐
2.3.2 단위 테스트의 장단점
단위 테스트의 장점
- 빠른 피드백이 가능하며 유지비가 적게 든다
단위 테스트의 단점
- 통합 테스트와 비교해 회귀 방지와 리팩터링 내성이 떨어진다
2.3.3 테스트 비율
- 단위 테스트와 통합 테스트의 비율은 프로젝트의 특성에 따라 다를 수 있지만 일반적으로 아래와 같다
- 단위 테스트로 가능한 많은 비즈니스 시나리오의 예외 상황을 확인한다
- 통합 테스트는 주요 흐름과 단위 테스트가 다루지 못하는 기타 예외 상황을 다룬다
- 주요 흐름은 시나리오의 성공적인 실행을 의미한다
- 예외 사항은 비즈니스 시나리오 수행 중 오류가 발생하는 경우다
- 대부분을 단위 테스트로 전환하면 유지비를 절감할 수 있다
- 중요한 통합 테스트가 비즈니스 시나리오당 하나 또는 두 개 있으면 시스템 전체의 정확도를 보장할 수 있다
- 이 지침을 따르면 테스트 피라미드의 형태가 나타날 것이다
- Good-Unit-Test.md - 테스트 피라미드 참고