Book
[Clean Code] TIL - 220207
refigo
2022. 2. 7. 15:54
9장. 단위 테스트
깨끗한 테스트는 즉시 빠르게 행동하고 독립적이고 어디서나 일관성이 있고 확고한 생각을 가진 사람 같다.
1. 생각
깨끗한 테스트는 한 가지에 집중한다.
빠르게 행동하고 독립적이고 어디서나 일관성이 있고 '네, 아니오'로 대답하는 확고한 생각을 가지고 즉시 행동한다.
유연성, 유지보수성, 재사용성을 보존하고 강화시켜서 실제 코드를 좋게 만든다.
2. 기억하고 싶은 내용
- 테스트 당 assert 하나
assert 문이 단 하나인 함수는 결론이 하나라서 코드를 이해하기 쉽고 빠르다.
하지만 때로는 주저 없이 함수 하나에 여러 assert 문을 넣기도 한다. 단지 assert 문 개수는 최대한 줄여야 좋다는 생각이다.
테스트 당 개념 하나
어쩌면 "테스트 함수마다 한 개념만 테스트하라"는 규칙이 더 낫겠다. 이것저것 잡다한 개념을 연속으로 테스트하는 긴 함수는 피한다.
한 테스트 함수에서 여러 개념을 테스트한다는 사실이 문제다. 그러므로 가장 좋은 규칙은 "개념 당 assert 문 수를 최소로 줄여라"와 "테스트 함수 하나는 개념 하나만 테스트하라"고 하겠다.
- F.I.R.S.T
깨끗한 테스트는 다음 다섯 가지 규칙을 따르는데, 각 규칙에서 첫 글자를 따오면 FIRST가 된다.
Fast:
테스트는 빨라야 한다.
테스트가 느리면 자주 돌릴 엄두를 못 낸다.
Independent:
각 테스트는 서로 의존하면 안 된다.
테스트가 서로에게 의존하면 하나가 실패할 때 나머지도 잇달아 실패하므로 원인을 진단하기 어려워지며 후반 테스트가 찾아내야 할 결함이 숨겨진다.
Repeatable:
테스트는 어떤 환경에서도 반복 가능해야 한다.
Self-Validating:
테스트는 bool 값으로 결과를 내야 한다.
통과 여부를 알려고 로그 파일을 읽게 만들어서는 안 된다.
테스트가 스스로 성공과 실패를 가늠하지 않는다면 판단은 주관적이 되며 지루한 수작업 평가가 필요하게 된다.
Timely:
테스트는 적시에 작성해야 한다. 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다. 실제 코드를 구현한 다음에 테스트 코드를 만들면 실제 코드가 테스트하기 어렵다는 사실을 발견할지도 모른다.
- 결론
테스트 코드는 실제 코드만큼이나 프로젝트 건강에 중요하다.
테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화하기 때문이다.
테스트 코드가 방치되어 망가지면 실제 코드도 망가진다. 테스트 코드를 깨끗하게 유지하자.