Moq Expect On IRepository 传递表达式

2023-11-26

我正在使用此代码来验证我正在测试的方法的行为:

    _repository.Expect(f => f.FindAll(t => t.STATUS_CD == "A"))
    .Returns(new List<JSOFile>())
    .AtMostOnce()
    .Verifiable();

_repository 定义为:

private Mock<IRepository<JSOFile>> _repository;

当我的测试运行时,我得到这个异常:

不支持表达式 t => (t.STATUS_CD = "A")。

如果我无法将表达式传递到 Expect 方法中,有人可以告诉我如何测试此行为吗?

Thanks!!


这是一种有点作弊的方式。我对表达式执行 .ToString() 并比较它们。这意味着您必须在被测试的类中以相同的方式编写 lambda。如果你愿意,你可以在此时进行一些解析

    [Test]
    public void MoqTests()
    {
        var mockedRepo = new Mock<IRepository<Meeting>>();
        mockedRepo.Setup(r => r.FindWhere(MatchLambda<Meeting>(m => m.ID == 500))).Returns(new List<Meeting>());
        Assert.IsNull(mockedRepo.Object.FindWhere(m => m.ID == 400));
        Assert.AreEqual(0, mockedRepo.Object.FindWhere(m => m.ID == 500).Count);
    }

    //I broke this out into a helper as its a bit ugly
    Expression<Func<Meeting, bool>> MatchLambda<T>(Expression<Func<Meeting, bool>> exp)
    {
        return It.Is<Expression<Func<Meeting, bool>>>(e => e.ToString() == exp.ToString());
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Moq Expect On IRepository 传递表达式 的相关文章