반응형
가독성 높이는 습관 - 테스트 코드 (1)
일반적인 휴먼 드리븐 테스트
- 1. 서버를 실행한다
- 2. 테스트 할 API 요청 값을 만든다
- 3. 해당 API를 요청한다
- 4. 결과 값을 확인한다
- 5. 결과 값의 상세 필드들이 올바른지 확인한다
테스트 코드를 작성해야 하는 이유
- 테스트에 대한 시간 및 비용 감소 (휴먼 드리븐 테스트 노가다 해방)
- 테스트 코드를 통한 빠른 피드백, 빠른 검증
- 실제 실행하기 전에 버그 발견 가능
- (검증으로 인한) 안정성 확보 → 비교적 안전한 리팩터링 가능
- (비용 감소로 인하여) 장기적으로는 더 빠른 코드 작성 가능
테스트 종류
- Unit test
- Integration test
- E2E test
Unit Test (단위 테스트)
INPUT x →
FUNCTION f:
→ OUTPUT f(x)
Unit test : F.I.R.S.T 속성
- Fast : 유닛 테스트는 빨라야함
- Isolated : 다른 테스트에 종속적인 테스트 금지
- Repeatable : 매번 같은 결과를 만들어야함
- Self-validating : 테스트는 스스로 결과를 검증할 수 있어야함
- Timely : 테스트는 적시에 작성해야함
Integration test (통합 테스트)
- real + infra (+ mock)
- unit test가 비지니스 로직의 flow에 대한 검증이라면,
- integration test는 환경(library and/or framework)에 대한 검증
E2E test
- 일반적으로 시스템 전체의 모든 것을 테스트
- 대부분의 전체 시스템이 구축이 완료되고 배포도 문제없이 진행되었을 때,
- 실제 유저 입장에서 시스템을 검증하는 단계로 UI부터 검증을 시작함
Test Pyramid
https://martinfowler.com/articles/practical-test-pyramid.html
Test anti pattern
https://dzone.com/articles/testing-iceberg
현실세계에서 테스트 - 프로젝트 진행 중에 수행되는 테스트
- 개발
- 기획 QA
- 개발망 QA
- 베타망 QA
- CBT
- ...
프로젝트별로 단계가 추가 또는 축소될 수 있음
정리
- manual test(휴먼 드리븐 테스트)는 안티 패턴(아이스크림 콘 패턴)
- 테스트 코드는 테스트 시간을 줄여줌
- 빠른 피드백으로 인해 조기에 잘못된 것을 발견할 수 있음
- 리팩터링을 위한 최소한의 안전성을 확보
- 유닛테스트는 FIRST 원칙을 지켜야함
- 일반적으로 부트 컨테이너가 포함되면 통합테스트로 간주함
- 전체 프로세스를 테스트한다면 E2E 테스트
반응형
'cs > java-spring-boot' 카테고리의 다른 글
[Zero-base] 10-5. 테스트 코드 (3) - 실습 (0) | 2022.03.19 |
---|---|
[Zero-base] 10-4. 테스트 코드 (2) (0) | 2022.03.18 |
[Zero-base] 10-2. 익셉션 핸들링 (2) - 실습 (0) | 2022.03.18 |
[Zero-base] 10-1. 익셉션 핸들링 (1) (0) | 2022.03.18 |
[Zero-base] 9-15. 주석 (0) | 2022.03.18 |