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);
+1 내가 필요 정확히이었다 – Luhmann
특정 람다 식을 매개 변수로 사용하여 메서드가 호출되었는지 확인하는 방법은 무엇입니까? Moq과 함께 할 수 있습니까? repository.Verify (x => x.Where (banner => banner.Is.AvailableForFrontend())); –
예, 설정하는 동안 검증이 가능하도록 지정할 수 있습니다. 저장소 .SETUP (X => x.Where (It.IsAny>())는 (목록) .Verifiable() .Returns 여기서 는 링크 설정은 확인되고 moq를 사용하는 예 : http://dotnet.dzone.com/news/beginning-mocking-moq-3-part-3 –
darthjit