Ch09. Unit Tests
테스트 코드가 중요하다고 듣고 가끔 생각하기만 했지 이렇게 강조되는 부분일 줄은 몰랐다.
TDD에 대해서 부정적으로 보는 사람들도 있어서 그렇구나 하고 생각했었는데 클린코드의 철학에서는 TDD가 필수인 것 처럼 보인다!
TDD 법칙
- 실패하는 테스트를 작성할 때까지 코드 작성 X
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 테스트 작성
- 현재 실패하는 테스트를 통과할 정도만으로 실제 코드 작성
→ 개발 테스트 주기가 30초 정도 대애박
테스트 코드는 실제 코드 못지 않게 중요함!
- 실제 코드가 진화하면 테스트 코드도 변화해야한다.
- 테스트 코드를 깨끗하게 유지하지 않으면 결국을 잃어버림
- 테스트 코드를 잘 짜두면 변경이 쉬워지고 변화를 통해 발생하는 버그에 대한 공포가 사라짐
- 가독성, 가독성, 가독성! 이 중요함
Build- Operate- Check 패턴
- 테스트 자료 만들기
- 테스트 자료 조작
- 조작한 결과가 올바른지 확인
좋은 테스트 규칙
- 개념 당 assert 문 수를 최소로 줄여라
- 무조건 1개일 때는 중복 코드가 많아지고, 부모 클래스 적용으로 해결할 수 있긴 하지만,, 굳이 1개를 고집할 필요는 없음. 하지만 최소로 줄이려고 노력은 해야함!
- 테스트 함수 하나는 개념 하나만 테스트하라
Fast, Independent, Repeatable, Self-Validating, Timely
- 실제 코드 구현 직전에, bool(성공, 실패) 결과를 내며 어떠한 환경에서도 반복 가능 해야 하고 빠르고 의존성이 없이 작성해야함!
TDD 매우 중요! 나중에 다시 깊게 공부해볼 필요 있음!
근데 왜 애자일에서 TDD를 쓸까?
→ 추상적인 레벨에서의 TDD의 핵심 개념
- 결정과 피드백 사이의 갭에 대한 인식, → 결정과 피드백 사이의 갭을 조절하기 위한 테크닉
- 즉, 애자일의 철학을 도입한 프로그래밍 기법이 TDD아닐까?
- 만약 어떤 부분에 대한 코딩을 여러번 해봤고, 결과를 예측할 수 있다면 TDD를 하지 않아도 됨!
- 처음하는 주제, 불확실성이 있거나 요구조건이 바뀔 수 있을 때! TDD를 진행함
- 즉, 애자일이 적용되는 플젝에는 TDD가 적합할 가능성이 매우 농후!