Mocking-Best-Practices
1 목 처리에 대한 모범 사례
- 목은 테스트 대상 시스템과 의존성 간의 상호 작용을 모방하고 검사하는 데 도움이 되는 테스트 대역이다
- 목은 비관리 의존성에만 적용해야한다
- 다른 것에 목을 사용하면 깨지기 쉬운 테스트가 된다
- 이 지침만 지키면 절반 이상의 성공을 거둔 것과 같다
- 관리 의존성과 비관리 의존성은 Why-Integration-Testing.md 참고
- 목에 대해 리팩터링 내성과 회귀 방지를 최대화해서 최대 가치의 통합 테스트를 개발하는데 도움이 되는 지침을 더 알아보자
관리 의존성
- 전체를 제어할 수 있는 프로세스 외부 의존성을 관리 의존성이라 한다
- 이러한 의존성은 애플리케이션을 통해서만 접근할 수 있다
- 따라서 해당 의존성과의 상호 작용은 외부 환경에서 볼 수 없다
- 좋은 예로 애플리케이션 데이터베이스가 있는데 이는 애플리케이션만 사용하는 데이터베이스르 말한다
- 따라서 외부 시스템은 데이터베이스에 직접 접근하지 않고 애플리케이션에서 제공하는 API를 통해 접근한다
- 관리 의존성과의 통신은 구현 세부사항이다
- 관리 의존성은 통합 테스트에서 해당 의존성을 그대로 사용하라
비관리 의존성
- 전체를 제어할 수 없는 프로세스 외부 의존성
- 해당 의존성과의 상호 작용을 외부에서 볼 수 있다
- 예를 들어 SMTP 서버와 메시지 버스 등이 있다
- 비관리 의존성과의 통신은 시스템의 식별할 수 있는 동작이다
- 해당 의존성은 목으로 대체해야 한다
2 목의 가치 극대화
2.1 시스템 끝에서 상호 작용 검증
2.2 목을 스파이로 대체
3 목 처리 모범 사례
3.1 목은 통합 테스트를 위한 것
- 목은 통합 테스트만을 위한 것이며 단위 테스트에서 목을 사용하면 안된다
- 코드는 두 가지 중 하나로 분류되며 둘 다는 아니다
- 도메인 모델: 복잡한 처리
- 컨트롤러: 프로세스 외부 의존성과 통신 처리
- 도메인 모델에 대한 테스트는 단위 테스트 범주에 속한다
- 컨트롤러를 다루는 테스트는 통합 테스트다
- 목은 비관리 의존성에만 적용이 가능하며 비관리 의존성은 처리하는 코드는 컨트롤러이기 때문에 컨트롤러를 테스트할 때만 목을 적용해야한다