我正在使用此代码来验证我正在测试的方法的行为:
_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(使用前将#替换为@)