【问题标题】:Is it possible (with Moq) to stub method calls with Lambda parameters?是否可以(使用 Moq)使用 Lambda 参数来存根方法调用?
【发布时间】:2023-03-30 14:31:01
【问题描述】:

如果我这样做:

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

“Where”是我的存储库中采用Func&lt;T, ISpecification&lt;T&gt; 的方法。 AvailableForFrontend 返回 ISpecification 的实现,list 是存储库泛型类型的 IEnumberable。

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

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

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

所以我的新手模拟/起订量问题是:我可以存根以 lamdba 作为参数的方法调用吗?还是我应该以其他方式解决这个问题?

【问题讨论】:

    标签: c# .net testing mocking moq


    【解决方案1】:

    您是否尝试过以下语法:

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

    【讨论】:

    • 验证一个方法是否被一个特定的 lambda 表达式作为参数调用呢?起订量可以吗? repository.Verify(x => x.Where(banner => banner.Is.AvailableForFrontend()));
    • 是的,如果您在设置时指定它是可验证的,则可以。存储库 .Setup(x => x.Where(It.IsAny>()) .Returns(list) .Verifiable(); 这是使用 moq 的设置验证示例的链接:@ 987654321@
    猜你喜欢
    • 2011-09-13
    • 2019-05-22
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2011-10-02
    • 2016-09-21
    相关资源
    最近更新 更多