테스트Medium#404
유닛 테스트(Unit Test)와 통합 테스트(Integration Test)의 차이점을 설명해주세요.
#테스트#UnitTest#IntegrationTest#품질
답변 포인트
테스트 대상의 범위와 외부 의존성 포함 여부를 기준으로 비교해보세요.
정답 및 해설
빠른 요약
테스트의 목적과 범위에 따라 테스트를 계층적으로 분류할 수 있습니다. ## 유닛 테스트 (Unit Test) 애플리케이션에서 가장 작은 단위(함수, 메서드, 클래스 등)가 의도한 대로 동작하는지 검증하는 테스트입니다.
테스트의 목적과 범위에 따라 테스트를 계층적으로 분류할 수 있습니다.
유닛 테스트 (Unit Test)
애플리케이션에서 가장 작은 단위(함수, 메서드, 클래스 등)가 의도한 대로 동작하는지 검증하는 테스트입니다.
- 특징:
- 격리(Isolation): 외부 의존성(데이터베이스, 네트워크, 파일 시스템 등)으로부터 완전히 분리되어야 합니다. 이를 위해 Mocking이나 Stub을 사용합니다.
- 속도: 매우 빠릅니다. 수천 개의 테스트를 몇 초 안에 실행할 수 있습니다.
- 정밀도: 실패 시 정확히 어느 코드 라인에서 문제가 생겼는지 즉시 알 수 있습니다.
- 목적: 코드의 논리적 오류를 조기에 발견하고, 리팩토링 시 안전장치 역할을 합니다.
통합 테스트 (Integration Test)
여러 개의 모듈이나 컴포넌트가 서로 결합되어 작동할 때, 그 상호작용이 올바른지 검증하는 테스트입니다.
- 특징:
- 결합(Integration): 모듈 간의 인터페이스, 데이터 흐름, 외부 시스템(DB, API 등)과의 연동을 확인합니다.
- 속도: 유닛 테스트보다 느립니다. 실제 네트워크나 DB 연결이 포함될 수 있기 때문입니다.
- 범위: 단위 간의 연결 고리나 데이터베이스 스키마 불일치 등을 찾아냅니다.
- 목적: 개별 모듈은 잘 작동하더라도, 모듈들이 만났을 때 발생하는 문제(통신 오류, 데이터 형식 불일치 등)를 찾아냅니다.
비교 요약
| 구분 | 유닛 테스트 | 통합 테스트 |
|---|---|---|
| 테스트 범위 | 최소 단위 (함수/클래스) | 여러 모듈/컴포넌트의 결합 |
| 의존성 처리 | Mock/Stub으로 격리 | 실제 또는 유사 환경 사용 |
| 실행 속도 | 매우 빠름 | 상대적으로 느림 |
| 발견 내용 | 개별 로직 오류 | 모듈 간 상호작용/흐름 오류 |