잘 구성된 테스트는 더 빠르고 안정적으로 제품을 만들 수 있게 도와준다. 이 문서는 테스트 구성을 위한 기본 원칙과 가이드라인을 제공한다.
일곱 테스팅 원칙(Seven Testing Principles)
각 항목에 대한 자세한 내용은 Seven Testing Principles 문서를 참고한다.
- 테스팅은 결함의 존재를 보여주는 것이다.
- 완벽한 테스트는 불가능하다.
- 테스트 구성은 가능한 빠르게 시작한다.
- 결함은 군집되어 있다.
- 살충제 역설(Pesticide Paradox): 비슷한 테스트가 반복되면 새로운 결함을 발견할 수 없다.
- 테스팅은 문맥에 의존적이다.
- 오류 부재의 궤변: 사용되지 않는 시스템이나 사용자의 기대에 부응하지 않는 기능의 결함을 찾고 수정하는 것은 의미가 없다.
F.I.R.S.T 원칙
유닛 테스트를 구성하기 위해서 F.I.R.S.T 원칙을 따른다. 각 항목에 대한 자세한 내용은 F.I.R.S.T Principles 문서를 참고한다.
- Fast: 유닛 테스트는 빨라야 한다.
- Isolated: 다른 테스트에 종속적인 테스트는 절대로 작성하지 않는다.
- Repeatable: 테스트는 실행할 때마다 같은 결과를 만들어야 한다.
- Self-validating: 테스트는 스스로 결과물이 옳은지 그른지 판단할 수 있어야 한다.
- Timely: 유닛 테스트는 프로덕션 코드가 테스트를 성공하기 직전에 구성되어야 한다. 테스트 드리븐 개발(TDD) 방법론에 적합한 원칙이지만 실제로 적용되지 않는 경우도 있다.
유닛 테스트
유닛 테스트는 아래 기본 가이드라인 항목에 따라 작성한다. 그 외 자세한 유닛 테스트 가이드라인은 JUnit Best Practices Guide 문서를 통해 숙지한다.
- 퍼블릭 메소드를 테스트한다.
- 테스트 결과에 영향을 미치는 디펜던시 객체는 모킹한다.
- 디스크 관련 디펜던시는 가능한 사용을 피한다.
- 네트워크 관련 디펜던시는 사용하지 않는다.