TDD 법칙 세 가지
- 실패하는 단위 테스트를 작성할 때가지 실제 코드를 작성하지 않는다.
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
- 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
이런 식으로 개발하게 되면 개발과 테스트가 30초 단 주기로 묶이게되고 테스트 코드가 실제코드가 함께 나오게 됨
깨끗한 테스트 코드 유지하기
- 테스트 코드는 실제 코드 못지 않게 중요
- 테스트 코드는 사고와 설계와 주의가 필요, 실제 코드 못지 않게 깨끗하게 짜야함
- 코드에 유연성, 유지보수성, 재사용성을 제공하는게 바로 단위테스트
깨끗한 테스트 코드
- 깨끗한 테스트 코드를 짜는 데 가장 중요한 것은 가독성⭐️
- BUILD-OPERATE-CHECK 패턴이 적합
ㄴ 테스트 자료를 만들고, 테스트 자료를 조작, 조작한 결과가 올바른지 확인(given when then)
- 도메인에 특화된 테스트 언어
ㄴ 흔히 쓰는 시스템 조작 API를 사용하는 대신 API 위에다 함수와 유틸리티를 구현한 후 그 함수와 유틸리티를 사용함
- 이중 표준
ㄴ 프로덕션 코드와 테스트 코드가 다를 수 있음. 실제 환경에서는 절대로 안되지만 테스트 환경에서는 문제없는 방식이 있을 수 있음
테스트당 assert 하나
F.I.R.S.T
- 빠르게(Fast) : 테스트는 빨리 돌아야함
- 독립적으로(Independent) : 테스트는 서로 의존해선 안됨
- 반복가능하게(Repeatable) : 어떤 환경에서도 반복 가능해야 함
- 자가검증하는(Self-Validating) : 테스트는 bool 값으로 결과를 만들어야함
- 적시에(Timely) : 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현해야 함