통합 테스트
애플리케이션의 여러 모듈이 올바르게 상호작용하는지 검증하는 테스트 단계. 서비스의 시스템들이 서로 상호작용 하는 것을 테스트 하기 위해서 작동하는 테스트를 의미한다.
특징
- 모듈 간 상호작용 검증
- 각 개별 모듈이 단위 테스트를 통과한 이후, 이들이 올바르게 동작 하는지 확인한다.
- 실제 환경에 가까운 테스트
- 통합 테스트는 실제 애플리케이션 동작과 유사한 환경에서 실행된다.
- 상대적으로 테스트 속도가 느리다
- 통합 테스트를 진행하기 위한 모든 모듈을 동작시켜야 하므로 시간이 오래걸린다.
장단점
- 장점
- 전체 시스템 동작 확인
- 실제 의존성들을 점검할 수 있다.
- 실제 사용자 관점에서 테스트할 수 있다.
- 단점
- 모든 연결 관계를 설정해야 하므로 초기 설정이 복잡해 질 수 있다.
- 느린 실행 속도
- 테스트 시 모듈이 얽혀 있으므로 에러 발생 위치를 찾기가 어렵다.
- 실제 배포 환경과 테스트 환경이 다르면 결과도 달라질 수 있다.
유닛(단위) 테스트
단위 테스트는 애플리케이션의 가장 작은 단위를 독립적으로 테스트하는 과정이다. 테스트 대상 코드를 격리하여 해당 코드의 동작이 예상대로 수행되는지를 확인한다.
특징
- 작은 단위 테스트
- 개별 함수, 메서드, 클래스 또는 모듈을 독립적으로 테스트한다.
- 외부 의존성(데이터베이스, API 등)을 최소화하거나 Mocking으로 대체한다.
- 빠른 실행 속도
- 단위 테스트는 외부 리소스를 거의 사용하지 않기 때문에 테스트 속도가 빠르다.
- 격리된 환경
- 테스트 대상 코드만 실행되며 다른 모듈이나 외부 시스템의 영향을 받지 않는다.
- Mock 또는 Stub을 사용해서 외부 의존성을 제거 한다.
장단점
- 장점
- 코드 품질 향상, 빠른 문제 진단.
- TDD의 장점
- 리팩토링 지원, 설계 개선.
- 자동화 및 지속적인 통합에 적합.
- 코드 품질 향상, 빠른 문제 진단.
- 단점
- 외부 의존성 테스트 불가.
- 유지보수 비용 증가.
- 전체 시스템 동작 검증 한계.
- 지나치네 Mocking을 사용하는 경우 실제동작과 달라질 수 있다.