클린 코드 - 9장 단위 테스트
CleanCode ·클린 코드 9장 단위 테스트를 정리합니다!
TDD 법칙 세 가지
- 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.
- 둘째 법칙: 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다
- 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
- 이렇게 일하면 방대한 테스트 코드를 만들고 그것은 심각한 관리 문제를 유발
깨끗한 테스트 코드 유지하기
- 테스트 코드는 실제 코드 못지 않게 중요
- 테스트 코드가 복잡할수록 실제 코드를 짜는 것보다
테스트 케이스를 추가하는 것이 시간이 더 걸림 - 테스트는 유연성, 유지보수성, 재사용성을 제공
- 테스트 케이스가 있으면 변경이 쉬워진다.
- 테스트 코드가 복잡할수록 실제 코드를 짜는 것보다
- 깨끗한 테스트 코드를 만드려면 가독성이 필요
- 가독성을 높이려면 명료성, 단순성, 풍부한 표현력이 필요
- 최소의 표현으로 많은 것을 나타내야 함
- 도메인에 특화된 테스트 언어
- 시스템 조작 API를 사용하는 대신 API 웨에다 함수와 유틸리티를 구현한 후
그 함수와 유틸리티를 사용하므로 테스트 코드를 짜기도 읽기도 쉬워짐 - 이렇게 구현한 함수와 유틸리티는 테스트 코드에서 사용하는 특수 API가 됨
- 즉, 테스트를 구현하는 당사자와 나중에 읽어볼 독자를 도와주는 테스트 언어
- 시스템 조작 API를 사용하는 대신 API 웨에다 함수와 유틸리티를 구현한 후
- 이중 표준
- 실제 환경에서는 절대로 안 되지만 테스트 환경에서는 전혀 문제없는 방식이 있음
- 대개 메모리나 CPU 효율과 관련 있는 경우인데 코드의 깨끗함과는 철저히 무관함
- 테스트 당 assert 하나
- 결론이 하나라서 코드를 이해하기 쉽고 빠르다.
- 꼭 하나가 아니라 최대한 줄이는 것이 좋다는 의미
- 테스트 당 개념 하나
- 장황한 테스트 코드 속에 감춰진 일반적인 규칙이 보임
F.I.R.S.T : 깨끗한 테스트가 따르는 다섯 가지 규칙
- Fast, 빠르게
- 테스트는 빨라야 한다.
- 테스트가 느리면 자주 돌릴 엄두를 못내 초반에 문제를 잡지 못함
- Indepentent, 독립적으로
- 각 테스트는 서로 의존하면 안됨.
- 한 테스트가 다음 테스트가 실행될 환경을 준비해서는 안된다.
- 각 테스트는 독립적으로 그리고 어떤 순서로 실행해도 괜찮아야 함.
- 테스트가 서로에게 의존하면 하나가 실패할 때 나머지도 잇달아 실패하므로
원인은 진단하기 어려워지며 후반 테스트가 찾아내야 할 결함이 숨겨짐
- Repeatable, 반복가능하게
- 테스트는 어떤 환경에서도 반복 가능해야 한다.
- 실제 환경, QA 환경, 버스를 타고 집에 가는 길에 사용하는 노트북 환경에서도 실행 가능해야 함
- 그렇지 않으면, 테스트가 실패한 이유를 둘러댈 변명, 테스트를 수행하지 못하는 상황에 직면함
- Self-Validating, 자가검증하는
- 테스트는 부울값으로 결과를 내야 함, 성공이 아니면 실패
- 스스로 성공과 실패를 가늠하지 않으면 판단은 주관적이 되며 지루한 수작업 평가가 필요하게 됨
- Timely, 적시에
- 테스트는 적시에 작성해야 한다.
- 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다.
- 구현 후에 테스트 코드를 만들면 실제 코드가 테스트하기 어렵단 사실을 발견할지도 모름
- 테스트가 불가능하도록 실제 코드를 설계할 지 모름