2010-02-09 3 views
6

내가 할 경우이 :람다 매개 변수를 사용하여 메소드 호출을 스텁하는 것이 가능합니까?

var repository = new Mock<IRepository<Banner>>(); 
repository.Setup(x => x.Where(banner => banner.Is.AvailableForFrontend())).Returns(list); 

"어디"는 Func<T, ISpecification<T>합니다 내 저장소에 방법입니다. AvailableForFrontend는 ISpecification의 구현을 반환하고 list는 저장소의 제네릭 유형에 대한 IEnumberable입니다.

잘 컴파일되지만 테스트를 실행할 때 다음과 같은 오류가 발생합니다.

---- System.NotSupportedException : Expression banner => Convert((banner.Is.AvailableForFrontend() & banner.Is.SmallMediaBanner())) is not supported. 

ISpecification을 직접받는 저장소의 다른 오버로드를 사용하는 경우 문제가 없습니다.

그래서 내 초보 mock/Moq 질문입니다 : 매개 변수로 lamdba를 사용하여 메서드 호출을 스텁링 할 수 있습니까? 아니면 다른 방법으로이 일을해야합니까?

repository.Setup(x => x.Where(It.IsAny<Func<T, ISpecification<T>>()).Returns(list); 

답변

10

은 다음 구문을 시도했습니다. 감사.
+0

+1 내가 필요 정확히이었다 – Luhmann

+0

특정 람다 식을 매개 변수로 사용하여 메서드가 호출되었는지 확인하는 방법은 무엇입니까? Moq과 함께 할 수 있습니까? repository.Verify (x => x.Where (banner => banner.Is.AvailableForFrontend())); –

+0

예, 설정하는 동안 검증이 가능하도록 지정할 수 있습니다. 저장소 .SETUP (X => x.Where (It.IsAny >())는 (목록) .Verifiable() .Returns 여기서 는 링크 설정은 확인되고 moq를 사용하는 예 : http://dotnet.dzone.com/news/beginning-mocking-moq-3-part-3 – darthjit

관련 문제