728x90
FIRST 원칙
FIRST 원칙이란?
- 클린코드 책의 저자인 Bob Martin이 처음으로 제시한 규칙
- 이 규칙의 목적은 효율적이고 좋은 단위 테스트를 하기 위함
- 아래와 같이 5가지의 요소로 이루어져 있음.
- 빠르고(Fast)
- 독립적이고(Independent)
- 반복가능하며(Repeatable)
- 자체 검증가능하며(Self-validating)
- 철저하고 적시에(Thorugh & Timely)
Fast
- 유닛테스트는 빠르게 실행되고 빠르게 결과를 알아야 한다는 의미.
- 빠르게 하기 위해선, 테스트 케이스의 단위가 최대한 작게 작성.
- 또한, 빠르게 단위테스트를 진행하기 위해 실제 서버나, DB와 통신하지 않고 Mock(가짜 데이터)를 이용.
- 즉, 실제 테스트를 하고 싶은 부분만 잘라서 테스트를 하는것이 중요함.
Independent
- 단위 테스트는 그 자체만으로도 충분히 실행되어야 함.
- 즉, 독립적이고 테스트들 끼리 의존하고나 영향을 주면 안됨
- 대표적인 독립적이지 않은 케이스는 아래와 같음
- A라는 테스트에서 객체의 상태를 변경함.
- B라는 테스트에서 A라는 테스트의 객체 상태를 변경을 모르고, 테스트 케이스를 작성함으로 테스트가 깨짐.
Repeatable
- 반복 가능해야 한다는 것은, 몇백번을 테스트가 실행되어도, 똑같은 결과가 나와야 한다는 의미.
- 예를들어, 덧셈을 하는 테스트에서
1 + 1는 2다.
라는 테스트가 있을때 몇백번 몇천번을 해도 동일한 결과가 나와야 한다는 의미. - 이 부분은 Independent와 연결되어 있는데, 테스트가 독립적이지 않고 다른 테스트와 서로 의존을 해 서로 테스트에 영향을 준다면 몇백번, 몇천번을 실행했을때, 간헐적으로 깨지는 케이스가 생길 수 있음.
Self-validating
- 단위 테스트는 자체적인 검증이 가능해야 함.
- 테스트를 실행 시, 실패했는지 성공 했는지에 대해 자동적으로 이뤄져야 함.
- 대표적인 잘못된 예시로는 Logger와 같은 출력 라이브러리를 이용해 출력값을 직접 사람이 검증해야 하는 테스트는 잘못된 테스트.
Thorough & Timely
- 철저하고 적절한 때에 작성이 되어야 함.
- 모든 데이터를 검사해야 함으로 최소에서 최대까지 범위를 포함해야 하며, 데이터가 변경되는 부분까지 신경써 테스트가 가능해야 함.
- 또한, 예외나 오류가 발생하는지도 테스트를 해야함.
728x90
728x90
'Common > Testing' 카테고리의 다른 글
통합테스트(IntegrationTest) 번역 (0) | 2021.04.11 |
---|