좋은 테스트의 조건 : FIRST
Fast : 빠르다
Isolated : 고립시킨다
Repeatable : 좋은 테스트는 반복 가능해야 한다.
테스트 설계에서 역할 중 일부는 테스트 결과가 매번 어떻게 나오는지에 대해 설명하는 단언을 제공하는 것이다.
반복 가능한 테스트는 실행할 때마다 결과가 같아야 한다. → 통제할 수 없는 외부 환경과 격리 시켜야 한다.
하지만 시스템은 불가피하게 통제할 수 없는 요소와 상호 작용 해야 한다. 예를들어 현재 시간 → Mock 객체 사용 할 수 있다.
가끔 DB와 같은 외부 환경적인 영향과 직접 상호 작용을 해야 할 수도 있다.
→ 별도의 오라클 인스턴스나 비표준 포트를 사용하는 웹 서버를 따로 활용할 수 있다.
Self-Validating : 스스로 검증 가능하다.
main()
을 통해서 결과값을 기대하는것과 비교하는 것은 많은 개수의 테스트를 지탱하기는 어렵다 (경험상 알지 않은가)
그리고 작게 분할한다고 하더라도 결과값이 무엇인지 기억해야 하는 문제도 있다.Timely : 적시에 사용한다.