단위 테스트
-
테스트 코드는 실제 코드만큼이나 프로젝트 건강에 중요하다. 어쩌면 실제 코드보다 더 중요할지도 모르겠다. 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화하기 때문이다. … 표현력을 높이고 간결하게 정리하자. 테스트 API를 구현해 도메인 특화 언어를 만들자. …
테스트 코드가 방치되어 망가지면 실제 코드도 망가진다. 테스트 코드를 깨끗하게 유지하자.
테스트 코드를 막 짠게되었을때 결과
-> 테스트 코드의 유지 보수가 어려워 진다
-> 실패 케이스가 늘어 난다
-> 불만과 핑계, 비난
-> 테스트 슈트를 폐기기해야하는 상황에 처한다
-> 테스트 슈트 폐기
-> 코드를 수정해도 안정하다는 검증을 하지 못한다
-> 결함률 증가
-> 코드를 변경이 득보다 해가 크다고 생각한다
-> 코드를 정리하지 않는다
-> 코드가 망가지기 시작
-> 테스트 슈트도 없고, 얼기설기 뒤섞인 코드에, 좌절한 고객과, 테스트에 쏟은 노력에 대한 실망감만 남는다
1. 깨끗한 테스트 코드 유지하기
- 테스트 코드는 실제 코드 못지 않게 중요함
- 테스트는 유연성, 유지보수성, 재사용성을 제공함
- 모든 변경이 잠정적 버그인 상황에서 테스크 케이스가 있으면 믿는 구석이 생심
- 실제 코드를 점검하는 자동화된 단위 테스트 슈트는 설계와 아키텍처를 최대한 깨끗하게 보존하는 열쇠
2. 깨끗한 테스트 코드
- 가독성: 명료성, 단순성, 풍부한 표현력
- 최소한의 표현으로 많은 것을 나타내야 함
- 본론에서 진짜 필요한 자료 유형과 함수만 사용
- 테스트 자료를 만듬
- 테스트 자료를 조작
- 조작한 결과가 올바른지 확인
- 도메인에 특화된 테스트 언어
- 시스템 조작 API 위에다 함수와 유틸리티를 구현한 후 그 함수와 유틸리티를 사용함
- 테스트 코드를 짜거나 읽기 쉽게 됨
- 이중 표준
- 메모리나 CPU 효율과 관련있는 경우
- 실제 코드만큼 효율적일 필요는 없음
- 테스트 코드에 적용하는 표준과 실제 표준이 다름
3. 테스트 당 assert 하나
- 테스트가 중복 될 경우 before 또는 class를 사용하여 중복된 테스트를 빼줌
- assert문은 최대한 줄이는게 좋음
- 테스트 당 개념 하나
4. F.I.R.S.T.
- Fast: 테스트는 빨라야 한다.
- Independent: 각 테스트는 서로 의존하면 안된다.
- Repeatable: 어떤 환경에서도 재사용이 가능해야 한다.
- Self-validating: Boolean값으로 결과를 내야한다.
- Timely: 적시에 작성한다.