클린코드
단위테스트
TDD 법칙 3가지
- 실패하는 단위 테스트를 작성할 때까지 실제코드를 작성하지 않는다.
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
- 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
위 세가지 규칙을 따르면 개발과 테스트가 대략 30초 주기로 묶인다.
실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다.
클린 테스트 코드 유지하기
테스트가 없는것 보다는 있는것이 좋기 때문에 클린코드를 테스트 코드에는 적용시키지 않았다.
그런데 문제가 생겼다 코드가 변하기 때문에 테스트 코드도 변한다. 테스트 코드를 유지보수 하기가 쉽지 않다.
테스트 코드는 실제 코드 못지 않게 중요하다.
테스트 기능 사용
테스트 케이스가 없으면 코드를 변경하기 어렵다 모두가 잠정적인 버그이다.
코드 커버리지가 높으면 공포는 줄어든다. 좋은 아키텍트로 변경하기 좋다.
클린 테스트 코드
클린 테스트 코드를 만들려면 3가지가 필요하다. 가독성 가독성 가독성
테스트 코드는 build operate check pattern이 어울린다.
만들고, 실행시키고, 확인하고
해당분야의 밀접한 테스트 언어
자기 코드를 좀더 간결하고 표현력이 풍부한 코드로 리팩토링 해야 된다.
이중 표준
실제 환경과 테스트 환경의 요구사항이 판이하게 다르다. 실제 환경의 코드 만큼 효율적일 필요는 없다.
테스트당 assert 하나
테스트 코드를 짤때 함수마다 assert문이 하나만 사용해야 한다고 주장하는 학파가 있다.
가혹한 규칙일지 모르지만 확실히 장점이 있다.
assert 문이 하나인 함수는 결론이 하나라서 코드를 이해하기 쉽고 빠르다.
테스트를 분리하면 중복 되는 코드가 많아진다. 템플릿 메소드 패턴을 사용하면 중복을 제거 할수 있다.
테스트당 개념하나
어쩌면 테스트 함수마다 개념 하나만 테스트하라는 규칙이 더 낫겠다.
가장 좋은 규칙은 개념당 assert문 수를 최소한 줄여라
테스트 함수 하나는 개념 하나만 테스트 하라.
F.I.R.S.T
클린 테스트의 다섯가지 규칙
빠르게 FAST : 테스트는 빨라야 한다. 테스트는 빨리돌아야 된다.
독립적으로 : 각 테스트는 서로 의존하면 안된다.
반복 가능하게 : 테스트는 어떤 환경에서도 반복이 가능해야 된다.
자가 검증하는 : 테스트는 bool값으로 결과를 내야 된다. 성공 아님 실패다
적시에 : 테스트는 적시에 작성해야 된다.
결론
테스트 코드는 실제 코드만큼이나 프로젝트 건강에 중요하다.