단위 테스트의 목표
- 단위 테스트에 시간을 투자할 때는 항상 최대이익을 얻도록 노력해야 하고, 테스트에 드는 노력을 가능한 줄이고 그에 따르는 이득을 최대화 해야 한다.
- 단위 테스트의 목표 : SW 프로젝트의 지속 가능한 가능하게 하는 것
- 지속 가능한 프로젝트 성장을 위해서는 고품질 테스트에만 집중해야함 (고품질이란 뭘까)
테스트 스위트란? 테스트 케이스들을 하나로 묶은 것이다. 스위트는 자신의 테스트들을 실행함
코드 커버리지
- 코드 커버리지가 너무 적을 때는 테스트가 충분하지 않다는 좋은 증거이다. 그러나 반대의 경우는 그렇지 못함. 커버리지 100%라고 해도 양질의 테스트라고는 하지 못한다. (높은 품질을 위해서 커버리지를 높여야 하지만, 커버리지가 높다고 해도 고품질의 테스트는 아니다?)
- 테스트 스위트의 품질을 결정하는데 어떤 커버리지 지표도 의존할 수 없는 이유
- 테스트 대상 시스템의 모든 가능한 결과를 검증한다고 볼 수 없다
- 외부 라이브러리 코드 경로를 고려할 수 있는 커버리지 지표는 없다
- 코드 커버리지 측정 → 품질 테스트 스위트 첫 걸음
성공적인 test suite 3가지 특성
- 개발 주기에 통합되어 있다 → 작은 변경이라도 테스트 코드는 실행이 되어서 검증이 되어야함
- 코드베이스에서 가장 중요한 부분만을 대상으로 진행
- 시스템의 중요한 부분에 단위 테스트 노력을 기울이고, 다른 부분은 간접적으로 검증하는 것이 좋다
- 가장 중요한 부분은 비즈니스 로직이 있는 부분
- 이것을 따르려면 도메인 모델은 비즈니스 로직과 분리를 해야함, 중요한 부분과 아닌 부분의 분리
- 최소한의 유지비로 최대의 가치를 끌어낸다.
- 가치있는 테스트를 식별하고 가치 있는 테스트를 작성해야함
단위 테스트란 무엇인가?
단위 테스트
- 작은 코드 조각을 검증
- 빠르게 수행
- 격리된 방식으로 처리하는 자동화된 테스트
격리 문제에 대한 고전파의 접근
고전적인 방법에서 코드를 꼭 격리하는 방식으로 테스트해야 하는 것은 아니다. 대신 테스트들은 서로 격리가 필요함
의존성의 종류
- 공유 의존성 : 테스트 간에 공유되고 서로의 결과에 영향을 미칠 수 있는 수단을 제공하는 의존성
- 비공개 의존성 : 공유하지 않는 의존성
- 프로세스 외부 의존성 : app 실행 프로세스 외부에서 실행되는 의존성 (아직 메모리에 없는 데이터에 대한 프록시)
- 휘발성 의존성
- 개발자 머신에 기본 설치된 환경 외에 런타임 환경의 설정 및 구성 (실제 DB 또는 API 서비스)
- 비결정적 동작을 포함. 난수 생성기 또는 시간 반환 클래스
런던파 ←→ 고전파
- 격리 주체
- 런던파 : 단위
- 고전파 : 단위 테스트
- 단위의 크기
- 런던파 : 단일 클래스
- 고전파 : 단일 클래스 or 클래스 세트
- 테스트 대역 사용 대상
- 런던파 : 불변 의존성 외 모든 의존성
- 고전파 : 공유 의존성
'Java' 카테고리의 다른 글
JIT Compiler (0) | 2023.01.04 |
---|