오늘은 좋은 테스트를 만들기위한 지표인 "FIRST" 속성에 대해서 공부할 예정이다.
JUnit으로 생산성을 높이기 위해서는 테스트 대상과 커버하는 경계 조건, 좋은 테스트의 요건을 알아야 한다.
위와 같은 요건을 위한 가이드 라인이 존재한다. 그게 바로 "FIRST"이다.
테스트가 빨라야하는 이유는 매번 소스를 작성할 때마다 테스트를 돌려야하는데, 테스트가 30분이 걸린다면 그 누가 돌리고 싶겠는가..
테스트를 빠르게 하는 방법은 여러가지가 존재한다.
테스트 대상 코드는 다른 대상과 상호작용해서는 안된다.
외부 코드와 상호작용할 경우에는 외부 변화에도 걱정해야한다. 그리하여 테스트가 가용성 혹은 접근성에 이슈가 생겨 실패할 가능성이 있다.
테스트 코드가 다른 테스트 코드에 의존할 경우 테스트가 실패했을 때, 앞선 테스트 중에서 어떤 테스트가 오류인지 확인하기 힘들다.
해당 내용은 SRP(단일 책임 원칙)을 따르면 해결된다.
반복 가능한 테스트는 실행할 때마다 같은 결과가 나와야 한다.
"현재 시간"과 같은 내용이 들어갈 경우 테스트를 할 때 마다 다른 결과가 나올 수 있다. 불가피하게 "현재 시간"을 사용해야할 경우 실패할 가능성을 없애야 한다.
시스템은 자체적으로 검증할 수 있어야 한다.
개발자가 테스트 하나하나 살펴보지않아도(print문을 통한 내용 확인) 테스트는 자체적으로 검증이 되어야 한다.
테스트는 적시에 사용해야 한다.
단위 테스트로 코드를 검증하는 것을 미룰수록 테스트는 기하급수적으로 어려워진다. 그래서 새로운 소스를 작성할 때 바로 단위테스트를 수행하는 것이 가장 효과가 좋다.