728x90
목차
- 개요
- 단위 테스트(Unit Test)
- 통합 테스트(Integration Test)
- 인수 테스트(Acceptance Test)
- 결론
1. 개요
테스트를 크게 3가지 분류로 나눌 수 있는데 가장 많은 범위를 차지 하고 있는 단위 테스트 통합 테스트, 인수 테스트 순으로 위 그림 처럼 나타낼 수 있다.
이는 테스트 케이스의 개수라고 보면 될 것이고 코드 범위로 따지면 단위테스트가 가장 작고 인수 테스트가 가장 큰 것을 볼 수 있다.
2. 단위 테스트(Unit Test)
- 단일 서버 / 단일 프로세스 / 단일 쓰레드에서 돌아가는 테스트를 말한다.
- 테스트에 Disk I/O가 있어서는 안되고 Blocking call이 있어서도 안된다.
- 매우 간단하고 명확해야 하며 기본적으로 테스트를 위한 입력 값을 주어 그에 대한 함수의 출력 값이 정확 한지를 판단하는 것이다.
- 빠르고 결정적인 테스트를 여러개 만들어서 코드 커버리지를 높이고 테스트 피라미드 처럼 단위테스트가 가장 많아야 한다.
장점
- 격리된 환경에서 개별적인 코드 단위를 테스트하므로 디버깅과 문제 해결이 쉬움.
- 코드의 특정 기능을 독립적으로 검증하므로 코드의 신뢰성을 높임.
단점
- 개별적인 코드 단위를 대상으로 하기에 시스템 전체적인 동작은 반영하지 않음.
- 외부시스템이나 의존성에 대한 테스트를 제한적으로 수행하여 통합 이슈를 놓칠 수 있음.
3. 통합 테스트(Integration Test)
- 단일 서버 / 멀티 프로세스 / 멀티 쓰레드에서 돌아가는 테스트를 말한다.
- H2 같은 테스트용 DB를 사용할 수 있게 된다
- 예를 들면, 개발자가 변경할 수 없는 부분까지 묶어 검증할 때 사용한다. DB에 접근하거나 전체 코드와 다양한 환경이 제대로 작동하는지 확인하는데 필요한 모든 작업을 수행할 수 있다.
장점
- 다양한 구성 요소간 상호작용을 테스트하여 단위테스트보다 정확하게 평가 할 수 있음.
- 시스템의 전체적인 작동 여부를 확인할 수 있으므로 사용자 요구 사항을 충족시킬 수 있음.
단점
- 테스트 케이스 작성에 대한 복잡성이 증가하여 시간이 오래 걸릴 수 있음.
- 의존성 문제로 테스트 환경 설정이 복잡해 질 수 있음.
4. 인수 테스트(Acceptance Test)
- 멀티서버 환경에서 돌아가는 테스트를 말한다.
- 시나리오(사용자 스토리) 기반으로 제대로 동작하는지 완전한 기능 테스트를 의미한다.
장점
- 배포 없이 받는 빠른 피드백.
- 도메인과 서비스 흐름 파악에 큰 도움이 됨.
- 도메인 이해에 예상보다 짧은 시간 소요.
- 실제 사용자 관점에서 요구사항을 충족하는지 확인 가능.
단점
- 테스트 케이스 작성시 복잡하고 번거로울 수 있음.
- 요구사항이 변경될 경우 테스트 케이스 작성의 시간 소요가 발생됨.
with 인수 테스트
- 배포 없이 테스트로 대부분 검증 가능
- 인수 테스트로 스펙 표현 가능
without 인수 테스트
- 배포해서 기능 동작 확인
- 페이지에서 직접 테스트
- 수동으로 변경 사항을 확인
5. 결론
- 앞서 말한 테스트들이 잘 작성되어 있다면 기능을 추가 할 때 테스트 코드로 인해 빠른 피드백을 받을 수 있는 방법이 되는 것이다.
- 즉, 리팩토링이 이루어져도 기본 테스트가 정상적으로 성공되었다면 심리적 안정감과 자신감을 주는 든든한 지원군이 생긴 것과 같을 것이다.
참고
반응형
'Spring' 카테고리의 다른 글
spring boot의 가장 큰 장점 Auto Configuration이란? 동작 방식은? (0) | 2023.06.16 |
---|---|
Statement vs PreparedStatement (0) | 2023.05.22 |
테스트코드는 무엇이고 왜 작성해야 할까요? (0) | 2023.05.15 |
Maven vs Gradle (0) | 2023.04.27 |
Spring vs Spring boot (0) | 2020.07.23 |