README
Unit Testing
- 단위 테스트 목표
- 코드 커버리지, 좋은 테스트 스위트의 특성
- 단위 테스트란 무엇인가?
- 단위 테스트, 고전파, 런던파
- 협력자
- 공유 상태, 공유 의존성, 비공개 의존성, 프로세스 외부 의존성
- 단위 테스트 구조
- AAA 패턴, 테스트 픽스쳐, 단위 테스트 명명법, 매개변수화된 테스트
- 좋은 단위 테스트의 4대 요소
- 회귀 방지, 리팩터링 내성, 빠른 피드백, 유지 보수성
- 테스트 피라미드, 블랙박스 테스트, 화이트박스 테스트
- 목과 테스트 취약성
- 테스트 대역(목, 스파이, 스텁, 더미, 페이크)
- 식별할 수 있는 동작, 구현 세부 사항
- 육각형 아키텍처, 시스템 내부 통신, 시스템 외부 통신, 애플리케이션 데이터베이스
- 단위 테스트 스타일
- 출력 기반 테스트
- 상태 기반 테스트
- 통신 기반 테스트
- 통합 테스트를 하는 이유
- 통합 테스트, 관리 의존성, 비관리 의존성, 인터페이스
- 목 처리에 대한 모범 사례
- 데이터베이스 테스트
- 단위 테스트 안티 패턴
유닛 테스트 가이드
- 테스트 대역
- 테스트 대역은 모든 유형의 비운영용 가짜 의존성을 설명하는 포괄적인 용어다
- 실제로 목과 스텁의 두 가지 유형으로 나눌 수 있다
- 목: 목은 외부로 나가는 상호 작용을 모방하고 검사하는데 도움이 된다
- 스텁: 스텁은 내부로 들어오는 상호 작용을 모방하는데 도움이 된다
- 스텁으로 상호 작용 검증하지 말라
- 시스템 내부 통신과 시스템간 통신
- 시스템 내부 통신
- 애플리케이션 내 클래스 간의 통신
- 구현 세부 사항
- 목을 사용하지 않는다.
- 시스템간 통신
- 애플리케이션을 통해서만 접근할 수 있는 외부 시스템은 구현 세부 사항으로 목으로 대체하지 않는다
- 부작용이 외부 환경에서 보일 때만 목을 사용하여 검증한다.
- 즉 식별할 수 있는 동작인 경우만 목을 사용한다.
- 시스템 내부 통신
- 공유 의존성
- 공유 의존성은 테스트 간의 격리를 무너뜨려 테스트를 병렬적으로 실행할 수 없게 한다
- 프로세스 내부
- 프로세스 내부 공유 의존성의 전형적인 예는 정적 가변 필드와 싱글턴이 있다
- 각 테스트에서 별도의 인스턴스를 공급할 수 있어 비공개 의존성으로 만들 수 있다
- 프로세스 외부
- 프로세스 외부 공유 의존성의 대표적인 예로 데이터베이스나, 메시지 버스, SMTP 서비스가 있다.
- 일반적인 접근법은 이러한 의존성을 테스트 대역, 목과 스텁으로 교체
- 프로세스 외부 의존성이 애플리케이션을 통해서만 접근할 수 있으면 이러한 의존성과의 통신은 시스템에서 식별할 수 있는 동작이 아니다.
- 관리 의존성
- 완전한 제어권을 가진 프로세스 외부 의존성을 관리 의존성이라고 한다.
- 애플리케이션을 통해서만 접근할 수 있는 외부 시스템과의 통신이 구현 세부 사항인 이유는 통신 결과의 부작용을 외부에서 확인할 수 없기 때문이다
참고