2011-08-18 3 views
0

우리는 EF4를 사용하고 있고 DAL 레이어 (DAL 레이어는 linq 쿼리를 가지고 있음) 용 테스트 케이스를 생성하고 있습니다. TypeMock을 조롱 프레임 워크로 사용하고 있습니다. 테스트를 위해, 우리는 ObjectContext의 Fakecontext을 작성하고 다음과 같이 CreateObjectSet 방법을 조롱하고 있습니다 :EF4 'Include'메소드를 테스트하기위한 ObjectQuery를 만드는 방법

Isolate.WhenCalled(() => fakeContext.Context.CreateObjectSet<User>)).WillReturnCollectionValuesOf(fakeUsers.AsQueryable()); 

위의 노력 벌금을. 문제는 '포함'을 사용하여 관련 테이블을 포함하려고 할 때입니다.

public static IQueryable<T> Include<T>(this IQueryable<T> source, Expression<Func<T>> property) 
{ 
    var objectQuery = source as ObjectQuery<T>; 

    if (objectQuery != null) 
    { 
     var propertyPath = GetPropertyPath(property); 
     return objectQuery.Include(propertyPath); 
    } 

    return source; 
} 

그래서 인 일이 무엇인지, 위의 Include 방법에 소스 유형은 ObjectQuery<T>을해야한다 : 우리는 다음과 같이이 방법을 포함 드리고 있습니다. 그러나 우리가 CreateObjectSet을 조롱 했으므로 Include 방법의 소스 유형은 Collection.Generic.List 유형입니다. 위의 경우에 우리가 어떻게 조롱해야하는지 알려주세요. 시의 적절한 도움을받을 수 있습니다. 감사합니다

+0

하나 이상의 질문에 올바르게 서식을 지정할 수 있습니까? –

+0

[관련 엔티티 포함 방법] (http://stackoverflow.com/questions/7104461/how-to-include-associated-entities) –

답변

0

Object Services 단위 테스트를 작성할 때 사용하기가 어려울 수 있습니다. 불행히도, 당신이 알아 낸대로 ObjectQuery<T>을 조롱 할 좋은 인터페이스가 없습니다. 내 ObjectContext을 캡슐화하는 저장소 패턴 다음 나는 래퍼 클래스를 만든이 시나리오를 처리하고 ObjectQuery<T>을 캡슐화하는 래퍼 클래스를 생성하려면 :

public interface IMyObjectQuery<T> : IOrderedQueryable<T> 
{ 
    IMyObjectQuery<T> Include(string path); 
} 

public class MyObjectQuery<T> : IMyObjectQuery<T> 
{ 
    private ObjectQuery<T> _query; 

    public MyObjectQuery(ObjectQuery<T> query) 
    { 
     _query = query; 
    } 

    IMyObjectQuery<T> Include(string path) 
    { 
     //There is probably a better way to do this 
     //but you get the idea 
     return new MyObjectQuery(_query.Include(path)); 
    } 

    //Implement IQueryable, IEnumerable... 
} 

을 그리고 그것은 당신의 ObjectContext를위한 저장소 래퍼를 구현의 문제이다. Here은 시작하기위한 링크입니다. 이 같은

추가 뭔가 : 그것은 간단한 작업이 아니므로 이것은 아마 당신이 찾고있는 간단한 해결책이 아니다

public class MyRepository : IMyRespository 
{ 
    ... 
    public IMyObjectQuery<T> CreateQuery<T>() 
    { 
     return new MyObjectQuery(_context.CreateQuery<T>()); 
    } 
    ... 
} 

. 나는 당신이 시험을 치는 데 어려움을 겪을 것입니다.

관련 문제