Updated: 22.09.20
Table of Contents
Part I. 더 큰 그림
1. 단위 테스트의 목표
- 항상 최대한의 이득을 얻도록 노력해야 한다.
- 테스트에 드는 노력을 가능한 한 줄이고 그에 따르는 이득을 최대화해야 한다.
- 코드는 점점 나빠지는 경향이 있다.
- 변경이 생길 때마다 무질서도가 높아진다.
- 지속적인 관리가 필요한데 이 때 테스트가 필수적이다.
- 단위 테스트는 프로젝트의 지속 가능한 성장을 가능하게 하는데 그 목표가 있다.
- 회귀(regression)
- 특정 사건 후에 기능이 의도한 대로 작동하지 않는 경우
- 테스트의 비용
- 제품 코드를 리팩토링할 때 테스트도 리팩토링한다.
- 변경 시 테스트를 수행한다. (watch)
- 테스트를 읽는데 시간을 투자하라
- 커버리지
- 코드 커버리지(테스트 커버리지) = 실행 코드 라인 수 / 전체 라인 수
- 분기 커버리지 = 통과 분기 / 전체 분기
- 커버리지는 숫자가 매우 낮으면 문제지만 (60%) 이 수치를 넘어 점수가 높다고 해서 다른 의미를 갖진 않는다. (좋은 것도 아님)
- 성공적인 테스트 스위트란?
- 테스트를 하나씩 따로 평가하는 방법 뿐.
- 자동으로 확인할 수 없다.
- 개발 주기에 통합되어있으며,
- 가장 중요한 부분만을 대상으로 하고
- 최소한의 유지비로 최대의 가치를 끌어내는 것.
2. 단위 테스트란?
- 정의
- 작은 코드 조각을 검증하고(?)
- 빠르게 수행하고
- 격리된 방식으로 처리하는
- 자동화된 테스트
- Mock의 장점 (테스트 대역)
- 입지상: 동작을 외부 영향과 확실하게 분리하여 테스트 대상에만 집중할 수 있다.
- 어느 부분이 고장났는지 확실하게 알 수 있다.
- Mock의 단점
- 공유 의존성
- 서로의 실행 흐름, 결과에 영향을 미칠 수 있는 수단을 제공하는 의존성