[실용주의 단위 테스트] 5장_좋은 테스트의 FIRST 속성
의미있는 테스트를 만드는데 도움을 주는 핵심 개념을 정리한다.
좋은 테스트 조건 : FIRST ( Fast / Isolated / Repeatable / Self-validating / Timely )
1. Fast
테스트를 빠르게 유지해라. 단위 테스트를 하루에 서너 번 실행하기도 버겁다면 잘못된 것이다. 예를 들면, 모든 테스트 코드가 데이터베이스를 호출하면 전체 테스트 역시 느릴 것이다.
2. Isolated
좋은 단위 테스트는,
검증하려는 작은 양의 코드에 집중
한다. ‘단위’ 라고 말하는 정의와 부합한다.다른 단위 테스트에 의존하지 않는다
. 만약, 여러 테스트가 값 비싸게 생성된 데이터를 재사용 하는 방식으로 테스트 순서를 조작해서 전체 테스트의 실행 속도를 높이려 할 수도 있다. 하지만, 이것은 의존성의 악순환만 발생시킨다. 테스트 실패시, 무엇이 원인인지 알아내느라 오래 걸릴 수 있다.
객체 지향 설계에서 SRP 는 클래스를 변경해야할 이유가 하나민 있어야한다고 말한다. 테스트 메서드도 마찬가지다. 테스트 메서드가 하나 이상의 이유로 깨지면 테스트를 분할해라.
그리고, 테스트에 두 번째 단언을 추가할 때 다음을 먼저 고민해보자.
이 단언이 단일 동작을 검증하도록 돕나 ?
아니면, 새로운 테스트 이름으로 기술할 수 잇는 어떤 동작인가 ?
3. Repeatble
좋은 테스트는, 실행할 때마다 결과가 같아야한다. 이러기 위해서는, 직접 통제할 수 없는 외부 환경과 격리시켜야한다.
4. Self-validating
테스트는 기대하는게 무엇인지 단언을 항상 해야한다.
테스트 결과를 수동으로 검증하는 것은 리스크가 크다.
조금 더 확장된 개념으로, 테스트를 수동으로 실행하는 것을 넘어 언제 어떻게 실행할지도 자동화할 수 있다. Jenkins 나 Teamcity 같은 지속적 통합 도구를 사용하면, 소스 저장소를 관찰하여 변화를 감지하고 빌드와 테스트 절차를 시작한다.
5. Timely
적절한 순간에 단위 테스트를 작성해라. 단위 테스트로 코드를 검증하는 것을 미루면 미룰수록, 결함이 늘어날 수 있다.
자바와 JUnit 을 활용한 실용주의 단위 테스트 <제프 랭어, 앤디 헌트, 데이브 토마스>