c# - 是否可以(使用 Moq)对带有 Lambda 参数的方法调用进行 stub ?

标签 c# .net testing mocking moq

如果我这样做:

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

“Where”是我存储库中的一个方法,它接受 Func<T, ISpecification<T> . AvailableForFrontend 返回 ISpecification 的实现,list 是存储库通用类型的 IEnumberable。

编译正常,但在运行测试时出现以下错误。

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

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

所以我的新手 mock/Moq 问题是:我可以 stub 一个以 lamdba 作为参数的方法调用吗?或者我应该换一种方式解决这个问题?

最佳答案

您是否尝试过以下语法:

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

关于c# - 是否可以(使用 Moq)对带有 Lambda 参数的方法调用进行 stub ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2228845/

相关文章:

c# - 使用大文档时运行正则表达式非常慢

c# - 在 EF Core 中更新数据的更好方法是什么

c# - 在面向 .NET 4+ 的库中公开通知时,IObservable 是否应该优先于事件

c# - Selenium 测试查找显示是否为 None

ruby-on-rails - 为什么实例变量有时会在 RSpec 测试中被过度使用?

c# - 如何解析 XML 中的所有实体引用并在 C# 中创建新的 XML?

c# - 如何为测试项目禁用 SonarLint

c# - 在 Windows 窗体文本字段上指定数据类型

.net - Azure .Net API 不会对专用端点进行出站调用,但在本地一切正常

linux - 如何模拟系统日期/时间的变化以进行测试?