2010-02-09 51 views
6

如果我这样做:是否有可能(通过Moq)使用Lambda参数存根方法调用?

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的存储库,直接采用ISpecification,theres没有问题。

所以我的新手模拟/ Moq的问题是:我可以用lamdba作为参数存根方法调用吗?或者我应该以另一种方式来解决这个问题?

回答

10

你试过的语法如下:

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

+1这是我需要什么。谢谢。 – Luhmann 2010-02-09 13:06:35

+0

验证一个方法是否已经使用特定的lambda表达式作为参数被调用了么? Moq有可能吗? repository.Verify(x => x.Where(banner => banner.Is.AvailableForFrontend())); – 2010-03-22 13:04:03

+0

是的,你可以,如果你指定它可以验证,而设置。 库 .Setup(X => x.Where(It.IsAny >()) .Returns(列表) .Verifiable(); 这里是链接到一个安装验证使用moq的示例: http://dotnet.dzone.com/news/beginning-mocking-moq-3-part-3 – darthjit 2010-03-22 17:25:46

相关问题