🤔 좋은 테스트란?
1. 실행 속도가 빨라야 한다.
- 빠른 피드백은 개발 속도를 향상시켜준다.
- 너무 느리면 테스트를 자주 실행하지 않게 된다.
2. 내부 구현 변경 시 실패하지 않아야 한다.
- 리팩토링할 때 테스트가 깨진다면? -> 오히려 코드 개선을 방해
- 자주 변하는 로직과 변하지 않는 로직을 구분
3. 버그를 검출할 수 있어야 한다.
- 소스 코드에 버그가 있어도 검출하지 못한다면 잘못된 테스트
- 테스트가 기대하는 결과를 구체적으로 명시하지 않으면 버그를 검출할 수 없음
4. 테스트의 결과가 안정적이어야 한다.
- 특정 환경에서만 실패하거나, 실행할때마다 결과가 달라지는 테스트는 신뢰할 수가 없음
- 외부 환경의 영향을 최소화해서 동일한 결과를 최대한 보장할 수 있는게 중요함
5. 의도가 명확히 드러나야 한다.
- 가독성 : "기계가 읽기 좋은 코드" ⇒ "사람이 읽기 좋은 코드"
- 테스트 코드를 보고 한 눈에 어떤 내용을 테스트하는지를 파악할 수 있어야 함.
📊 테스팅 ROI (투자 수익률)
테스트 코드 작성과 유지보수는 비용이다
- 테스트가 없는 것보다는 있는 게 무조건 낫다?
- 테스트는 많을 수록 좋다?