首页 > 解决方案 > 如何验证具有在 Linq 表达式中传递的特定值的 Moq 方法调用

问题描述

我正在尝试验证Deleteon myDomainContext是否已使用包含特定值的表达式进行调用。因此,简单的人为示例-真实代码:

DomainContext.Delete<Entity>(x => x.Id == id);

测试代码:

DomainContext = new Mock<DomainContext>();
DomainContext.Setup(x => x
    .Delete<Entity>(
        It.Is<System.Linq.Expressions.Expression<Func<Entity, bool>>> 
        (predicate => predicate == x => x.Id == id)
    ).Verifiable();

// act

DomainContext.Verify();

显然是行不通的,因为它试图通过引用比较两个谓词——它甚至可能不会评估id一侧或两侧的变量!

有什么方法可以写一个谓词(比如It.HasProperty?!)来替换predicate == x => x.Id == id以检查是否有调用来检查谓词是否被调用Id == the ID I'm expecting

标签: c#nunitmoq

解决方案


推荐阅读