2010-05-08 3 views
3

그래서 여기 있습니다 : LINQ to Entities (EF4/.NET4)를 사용하는 테스트중인 앱이 있습니다. 이 응용 프로그램은 null을 무시하고 데이터베이스 구성 방식으로 인해 대소 문자를 무시하는 Contains 메서드의 구현에 바인딩됩니다. 그건 잘된거야.단위 테스트 중에 IQueryable의 Contains 메서드를 재정의하려면 어떻게합니까?

그러나 단원 테스트에서 동일한 메서드를 호출 할 때 IQueryable의 메모리 내 구현을 사용하여 컬렉션을 노출하는 가짜 컨텍스트를 전달합니다. 이 경우 LINQ to Objects 버전의 Contains가 들어 와서 null과 대소 문자를 구분합니다.

이제 응용 프로그램 코드를 작성하여 null 및 대소 문자를 검사 할 수는 있지만 생성되는 SQL에 영향을 미치지 않으므로 단위 테스트에서 호출되고 SQL이 관련되지 않을 때 작동합니다. .

내가 원하는 것은 올바른 IQueryable 또는 무엇이든을 제공하여 테스트 중에 null 및 대소 문자를 무시하는 내 자신의 사용자 지정 Contains 구현에서 스왑 할 수 있도록하는 것입니다. 어떻게해야합니까? 감사!

답변

0

가짜 컨텍스트 인 경우 모의 도우미 IQueriable을 만들 수 없습니까?

+0

할 수 있습니다. 내 사용자 지정 Contains 메서드에 바인딩하려면 어떻게합니까? 그게 내가 붙어있는 곳이야. – csells

+0

모의를 함수에 어떻게 전달합니까? – Oded

+0

그건 그냥 가짜예요. Contains의 LINQ to Objects 바인딩이 호출되고 있습니다. 내 자신의 사용자 지정 구현의 Contains를 호출해야합니다. – csells

1

컴파일러는 가장 많이 파생 된 컴파일 타임 형식의 확장 방법에 바인딩합니다.

모의 인스턴스를 전달하고 유닛 테스트 컨텍스트에서 유형이 "포함"확장 메서드의 사용자 지정 구현이있는 경우에도 IQueriable 인스턴스를 제공했음을 알고있는 코드 만 호출하므로 바인딩됩니다 linq 개체 버전.

아마 implementing your own QueryProvider으로 이것을 달성 할 수 있지만 극단적 인 옵션 인 것 같습니다.

아마도 C# 4.0 동적 유형을 사용할 수있는 다른 방법이있을 수 있습니다.

관련 문제