저는 도메인 서비스를 데이터 소스에서 분리하여 단위 테스트에서 테스트 할 수있는 방법을 조사했습니다. 나는 그것들을 완전히 감추는 것이 불가능하다고 생각하기 시작했습니다.ObjectQuery.Include (문자열) 메서드를 사용하여 ObjectContext를 조롱 했습니까?
정보가 적당합니다 (예 : question 및 blog post). 특히 블로그 게시물을 통해 ObjectContext를 조롱 거리로 만들 수 있습니다.
public IQueryable<Client> GetClients()
{
return ObjectContext.Clients
.Include("Foo")
.Include("Bar")
.Where(c => c.IsBaz);
}
(어디 인터페이스에서 캡처되지 그것이 ObjectQuery<T>
를 반환으로 완전히의 Include
방법을 조롱 할 수 것, 및 방법을 포함하지 않습니다
는하지만 내 DomainServices이 같은 방법을 IObjectQuery 인터페이스는 없습니다). ObjectQuery
은 IQueryable<T>
을 구현하므로 IQueryable을 반환하는 내 자신의 Include 메서드를 만드는 것이 좋겠다고 생각했지만 쿼리 당 최대 한 번만 호출하도록 호출해야합니다.
EF4, .NET 4, Silverlight 4 및 RIA Services RTW를 사용하고 있습니다. 호언 장담의 비트로서
, 나는 RIA 서비스 엔티티 및 확장하여 테스트 비우호적 인 LINQ가
이런 테스트를 단위 테스트 대신 통합하는 것이 맞습니다. 아마도 하나의 해결책 일 것입니다. 비록 내가 약간의 경찰관 인 것 같은 느낌이 들지만. 내 DomainService에는 단위 테스트를 원하는 메소드가 있습니다. 이는 유효한 요청입니다. 그것은 어떤 데이터를 나타낼 지 결정할 때 앱의 진짜 부분입니다. 유닛 테스트를 목적으로 DomainServices를 조롱하는 것은 아주 일반적인 주제입니다. LINQ to SQL을 사용하는 대부분의 예제는 좀 더 쉽게 조롱되었으므로 SQL을 사용합니다. –
나는 그것이 당신의 DomainService에 있다는 것을 놓쳤습니다. 솔직히 나는 DDD 용어에 정통하지는 않지만 DB로부터의 객체 검색은 도메인 서비스가 요구하는 것처럼 보이지 않는다. 사람들은 서비스를 DDD에서나 그렇지 않은 다른 많은 것들을 호출한다. 나는 이것을 다음과 같이 보았습니다 : 객체 검색/데이터베이스 통합의 책임을 도메인 서비스가 수행하는 다른 로직과 섞어 보았습니까? 책임을 물어 보는 코드일지도 모릅니다.단위 테스트에서 실제 논리를 테스트하고 집중적 인 통합 테스트에서 실제 통합을 테스트 할 수 있습니다. – eglasius
DomainService는 클라이언트가 데이터를 검색하기 위해 호출하는 끝점입니다. 그러나 실제 데이터 검색을 수행하지는 않습니다. 일반적으로 실제 데이터 검색을 수행 할 객체가 있습니다 (LinqToEntitiesDomainService를 확장 한 DomainService의 경우 데이터베이스에서 데이터를 가져 오기 위해 'ObjectContext'를 요청합니다) 엔티티에 LINQ 사용). ObjectContext는 모의 실험을하기 위해 DomainService 모의 데이터를 제공 할 수 있습니다 ... –