목의 가치 극대화하기#
- 비관리 의존성에만 목을 사용하게끔 제한하는 것은 중요하지만, 이는 목의 가치를 극대화 하기 위한 첫 번째 단계일 뿐이다.
시스템 끝에서 상호 작용 검증하기#
- 시스템 끝에 있는 비관리 의존성을 목킹하여 상호 작용을 검증하라.
- 어떤 라이브러리에 대한 래퍼 클래스가 있으면, 래퍼 클래스 내에 있는 라이브러리 클래스를 목으로 검증하라.
- 시스템의 끝에서 상호 작용을 확인하면 회귀 방지가 좋아질 뿐만 아니라 리팩터링 내성도 향상된다.
목을 스파이로 대체하기#
- 스파이는 수동으로 작성하는 반면에 목은 목 프레임워크의 도움을 받아 생성한다는 것이 차이점이다.
- 시스템 끝에 있는 클래스의 경우 스파이가 목보다 낫다.
- 스파이는 검증 단계에서 코드를 재사용해 테스트 크기를 줄이고 가독성을 향상시킨다.
- 스파이 클래스에 플루언트 인터페이스를 제공하면 상호작용을 검증하는 것이 간결해지고 표현력도 생긴다.
- 플루언트 인터페이스: 메서드 체이닝을 기반으로 코드가 쉬운 영어 문자으로 보이게끔 가독성을 향상 시키는 API 설계 기법이다.
목 처리에 대한 모범 사례#
- 목 처리와 관련된 모범 사례
- 비관리 의존성에만 목 적용하기
- 시스템 끝에 있는 의존성에 대해 상호 작용 검증하기
- 통합 테스트에서만 목을 사용하고 단위 테스트에서는 하지 않기
- 항상 목 호출 수 확인하기
- 보유 타입만 목으로 처리하기
목은 통합 테스트만을 위한 것#
- 도메인 모델에 대한 테스트는 단위 테스트 범주에 속하며, 컨트롤러를 다루는 테스트는 통합 테스트다.
- 목은 비관리 의존성에만 해당하며 컨트롤러만 이러한 의존성을 처리하는 코드이기 떄문에 통합 테스트에서 컨트롤러를 테스트할 때만 목을 적용해야 한다.
테스트당 목이 하나일 필요는 없음#
- 동작 단위를 검증하는 데 필요한 목의 수는 관계가 없다.
- 통합 테스트에 사용할 목의 수를 통제할 수 없다.
호출 횟수 검증하기#
- 비관리 의존성과의 통신에 곤해서는 다음 두 가지 모두 확인하는 것이 중요하다.
- 예상하지 호출이 있는가?
- 예상치 못한 호출이 없는가?
보유 타입만 목으로 처리하기#
- 서드파티 라이브러리 위에 항상 어댑터를 작성하고 기본 타입 대산 해당 어댑터를 목으로 처리해야 한다.
- 서드파티 코드의 작동 방식에 대해 깊이 이해하지 못하는 경우가 많다.
- 해당 코드가 이미 내장 인터페이스를 제공하더라도 목으로 처리한 동작이 실제로 외부 라이브러리와 일치하는지 확인해야 하므로,해당 라이브러리를 목으로 처리하는 것은 위험하다.
- 서드파티 코드의 기술 세부 사항까지는 꼭 필요하지 않기에 어댑터는 이를 추상화하고, 애플리케이션 관점에서 라이브러리와의 관계를 정의한다.
- 이 지침은프로세스 내부의존성에 적용되지 않는다.
- 따라서 인메모리 의존성이나 관리 의존성을 추상화할 필요가 없다.
comments powered by