是否可以(使用 Moq)使用 Lambda 参数对方法调用进行存根?

发布于 2024-08-21 14:26:46 字数 691 浏览 3 评论 0 原文

如果我这样做:

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

“Where”是我的存储库中的一个方法,它采用 Func。 availableForFrontend 返回 ISpecification 的实现,list 是存储库通用类型的 IEnumberable。

它编译得很好,但是当我运行测试时出现以下错误。

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

如果我在存储库上使用直接采用 ISpecification 的其他重载Where,则没有问题。

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

If I do this:

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

"Where" is a method on my repository that takes a Func<T, ISpecification<T>. AvailableForFrontend returns an implementation of ISpecification, and list is an IEnumberable of the generic type of the repository.

It compiles fine, but i get the following error when I run my tests.

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

If i use my other overload of Where on the repository that takes a ISpecification directly, theres no problem.

So my newbie mock / Moq question is: Can I stub a method call with a lamdba as parameter? Or should I go about this in another way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

や三分注定 2024-08-28 14:26:46

您是否尝试过以下语法:

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

have you tried the following syntax:

repository.Setup(x => x.Where(It.IsAny<Func<T, ISpecification<T>>()).Returns(list);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文