SOLID 객체와 마찬가지로 단위 테스트에는 "한가지 이유"가 있어야한다는 의견에 동의합니다. 그것은 고귀한 목표이지만 많은 경우에 그것이 단순히 불가능하다는 것을 알게 될 것입니다. 이러한 경우 중 하나는 테스트 대상 시스템의 종속성 인 "풍부한"도메인 개체 (DDD가 "도메인 모델"을 구성하는 엔터티와 값 개체를 구분 함)가있는 경우입니다.
이러한 상황에서, 나는 철학이 주어진을도메인 개체는 자체적 인 포괄적 인 단위 테스트 적용 범위를 가지며 다른 SUT에 대해 단위 테스트에서 설계된대로 개체가 작동한다고해서 반드시 단위 테스트를 위반하지는 않습니다. 도메인에 대한 주요 변경으로 인해이 테스트가 중단 된 경우 도메인 개체의 단위 테스트도 중단되어 조사 할 대상으로 이끌 것입니다. 도메인 개체의 단위 테스트가 빨간색 테스트로 올바르게 업데이트 된 경우 변경 사항에 따라 녹색으로 바뀌고이 다른 테스트가 실패한 경우에도 반드시 나쁜 것은 아닙니다. 이는이 다른 테스트에 대한 기대치가 도메인에 대한 새로운 기대치와 상충됨을 의미하며, 둘 다 서로 동의하고 시스템의 가장 중요한 수용 기준을 확인해야합니다.
따라서 도메인 개체가 단위 테스트 관점에서 바람직하지 않은 "부작용"(예 : 데이터 저장소와 같은 외부 리소스를 건 드리는)을 생성하거나 도메인 개체의 논리가 충분히 복잡한 경우에만 도메인 개체를 조롱합니다. 테스트를 위해 올바른 상태로 배치하면 테스트를 정의하고 통과하는 데 방해가됩니다.
그런 다음 운전 질문이됩니다. 어느 것이 더 쉬운가요? 테스트 내에서 의도 한 목적으로 도메인 객체를 사용하거나 조롱하기 위해? 기능 변경으로 인해 서비스 테스트가 복잡한 방식으로 중단되는 경우처럼 더 쉬운 옵션이 될 때까지 더 쉬운 방법을 사용하십시오. 이런 일이 발생하면 테스트를 다시 작성하여 서비스에 의존하는 기능 요구 사항을 복잡하게 만들지 않고 모의 기능 요구 사항을 노출시키는 모의를 생성하십시오.
어느 쪽이든, 실제 서비스에 연결된 실제 도메인 객체를 사용하여보다 높은 수준의 추상화 (예 : 서비스 배후의 기능성뿐만 아니라 테스트 등)에서 상호 작용을 테스트하는 통합 도메인 객체를 사용하는 통합 테스트가 있어야합니다. 도메인 객체가 직렬화되고 전송되는 프록시).