DDD를 수행 할 때 엔티티와 값 객체를 조롱해야합니까?


9

읽은 후 기사 에 대한 Newable을주 사용 목적 및 방법이 개념은 DDD의 서비스 엔티티와 값 객체와 관련, 나는 특히 내 단위 테스트에 내 코드에서 newables를 사용하는 방법에 대한 몇 가지 의문이 남겨졌다.

Newables의 주요 후보는 Entities 및 Value 객체로, 이러한 종속성을 다른 객체에 주입하는 대신 new이러한 객체의 인스턴스 만 코드에서 직접 사용해야 함을 의미합니다.

그러나 적절한 DDD 관행은 엔티티 및 가치 개체가 적절하다고 판단되는 경우 책임을 부여 할 것을 권장합니다. 따라서 엔터티와 가치 개체는 심각한 비즈니스 로직을 갖습니다.

이제 서비스가 엔티티 또는 값 객체에서 작동하는 경우 엔티티 또는 값 객체를 조롱하고 서비스에 모의를 전달해야합니다 (조롱은 interface가치 객체 또는 엔티티가 옹호되는 것처럼 보일 것입니다)?

아니면 new엔터티 / 값 객체 만으로 서비스에 구체적인 구현을 전달하여 하나의 단위 만 테스트하는 단위 테스트 원칙을 위반해야합니까?



그것은 당신이 고전 또는
모형

@jhewlett 고전주의자는 아무것도 조롱하지 않을 것입니다. 모의자는 서비스, 리포지토리 및 팩토리 ( "주입 가능 제품") 만 모의하고 엔터티 또는 가치 개체 ( "신규")는 절대 모의하지 않습니다.
Rogério

서비스를 말할 때 @ Rogério; 응용 프로그램 서비스 또는 도메인 서비스를 의미합니까?
w0051977

@Songo, 무엇을 결정 했습니까? 당신은 조롱합니까? 가치 개체 및 도메인 서비스?
w0051977

답변:


11

SOLID 객체와 마찬가지로 단위 테스트에는 "한가지 이유"가 있어야한다는 의견에 동의합니다. 그것은 고귀한 목표이지만 많은 경우에 그것이 단순히 불가능하다는 것을 알게 될 것입니다. 이러한 경우 중 하나는 테스트 대상 시스템의 종속성 인 "풍부한"도메인 개체 (DDD가 "도메인 모델"을 구성하는 엔터티와 값 개체를 구분 함)가있는 경우입니다.

이러한 상황에서, 나는 철학이 주어진을도메인 개체는 자체적 인 포괄적 인 단위 테스트 적용 범위를 가지며 다른 SUT에 대해 단위 테스트에서 설계된대로 개체가 작동한다고해서 반드시 단위 테스트를 위반하지는 않습니다. 도메인에 대한 주요 변경으로 인해이 테스트가 중단 된 경우 도메인 개체의 단위 테스트도 중단되어 조사 할 대상으로 이끌 것입니다. 도메인 개체의 단위 테스트가 빨간색 테스트로 올바르게 업데이트 된 경우 변경 사항에 따라 녹색으로 바뀌고이 다른 테스트가 실패한 경우에도 반드시 나쁜 것은 아닙니다. 이는이 다른 테스트에 대한 기대치가 도메인에 대한 새로운 기대치와 상충됨을 의미하며, 둘 다 서로 동의하고 시스템의 가장 중요한 수용 기준을 확인해야합니다.

따라서 도메인 개체가 단위 테스트 관점에서 바람직하지 않은 "부작용"(예 : 데이터 저장소와 같은 외부 리소스를 건 드리는)을 생성하거나 도메인 개체의 논리가 충분히 복잡한 경우에만 도메인 개체를 조롱합니다. 테스트를 위해 올바른 상태로 배치하면 테스트를 정의하고 통과하는 데 방해가됩니다.

그런 다음 운전 질문이됩니다. 어느 것이 더 쉬운가요? 테스트 내에서 의도 한 목적으로 도메인 객체를 사용하거나 조롱하기 위해? 기능 변경으로 인해 서비스 테스트가 복잡한 방식으로 중단되는 경우처럼 더 쉬운 옵션이 될 때까지 더 쉬운 방법을 사용하십시오. 이런 일이 발생하면 테스트를 다시 작성하여 서비스에 의존하는 기능 요구 사항을 복잡하게 만들지 않고 모의 기능 요구 사항을 노출시키는 모의를 생성하십시오.

어느 쪽이든, 실제 서비스에 연결된 실제 도메인 객체를 사용하여보다 높은 수준의 추상화 (예 : 서비스 배후의 기능성뿐만 아니라 테스트 등)에서 상호 작용을 테스트하는 통합 도메인 객체를 사용하는 통합 테스트가 있어야합니다. 도메인 객체가 직렬화되고 전송되는 프록시).


DDD에서 "도메인 모델"에는 엔티티 및 값 개체뿐만 아니라 도메인 서비스, 리포지토리 및 팩토리도 포함됩니다.
Rogério

0

뭔가하지 작업이 수행 때 제대로 작동하는지 종속 클래스를 신뢰, 희망은이 테스트해야 다음, 일부 단위 테스트가 실패 매우 VELL. 중요한 단위 테스트가 누락되었을 수 있습니다. 테스트를 거치지 않은 경우 오류가 발생하여 원래 테스트 클래스에서 생성되며 종속 클래스 자체에서 포착되지 않습니다.

따라서 단위 테스트에 대한 필자의 의견으로는 종속 클래스를 조롱해야합니다. 그렇지 않으면 통합 테스트입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.