TDD 법칙 세 가지
- 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하기 않는다.
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
- 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
- 위 세 가지 규칙을 따르면 개발과 테스트가 대략 30초 주기로 묶임
- 이렇게 하면 매일 수십개, 수백개, 수천개의 테스트 케이스가 생성됨
- 실제코드와 맞먹을 정도의 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 함
깨끗한 테스트 코드 유지하기
- 테스트 코드를 잘 작성하지 않으면 변경되는 실제 코드에 대한 테스트 코드 변경이 어려움
- 테스트 코드가 없으면 자신이 수정한 코드가 제대로 동작하는지 확인할 방법이 없음
- 테스트 코드가 없으면 이쪽을 수정해도 저쪽이 안전한지 검증하지 못함
- 테스트코드는 실제코드만큼 중요
테스트는 유연성, 유지보수성, 재사용성을 제공
- 테스트코드를 깨끗하게 유지하지 않으면 결국 잃어버림
- 코드의 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트
- 단위 테스트는 설계와 아키텍처를 최대한 깨끗하게 보존하는 열쇠
깨끗한 테스트 코드
테스트 당 assert 하나
- give-when-then
- TEMPLATE METHOD 패턴을 사용하면 중복된 코드를 제공가능
F.I.R.S.T
- First
- Independent
- 각 테스트는 서로 의존하면 안됨(독립적으로 수행해야함)
- 하나의 테스트 실패로 연쇄실패가 발생해서는 안됨
- Repeatable
- 테스트는 어떤 환경에서도 반복 가능해야함
- 테스트가 하나라도 돌아가지 않는 환경이 있으면 안됨
- Self-validating
- 테스트는 bool값으로 결과를 내야함
- 성공 아니면 실패
- Timely
- 단위 테스트는 테스트라혀는 실제 코드를 구현하기 직전에 구현해야함
- 실제 코드를 구현하고 테스트 코드를 구현하면 실제코드가 테스트하기 어렵다는 사실을 발견하거나 테스트를 불가능하게 코드를 작성할 가능성이 존재함
References