Можно ли (с Moq) заглушить вызовы метода с параметрами Lambda? - PullRequest
6 голосов
/ 09 февраля 2010

Если я сделаю это:

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.

Если я использую другую перегрузку Where в репозитории, которая напрямую принимает спецификацию IS, проблем не будет.

Итак, мой вопрос для новичка: я могу заглушить вызов метода с параметром lamdba? Или мне по-другому?

1 Ответ

10 голосов
/ 09 февраля 2010

вы пробовали следующий синтаксис:

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