我的界面上有一个方法,如下所示:
T GetSingle(Expression<Func<T, bool>> criteria);
我试图模拟这样的设置(我意识到这不起作用):
_mockUserRepository = new Mock<IRepository<User>>();
_mockUserRepository.Setup(c => c.GetSingle(x => x.EmailAddress == "[email protected] /cdn-cgi/l/email-protection"))
.Returns(new User{EmailAddress = "[email protected] /cdn-cgi/l/email-protection"});
我意识到我向设置传递了错误的参数。
看完之后这个答案 https://stackoverflow.com/a/6626016/131809我可以通过传递表达式来使其工作,如下所示:
_mockUserRepository.Setup(c => c.GetSingle(It.IsAny<Expression<Func<User, bool>>>())
.Returns(new User{EmailAddress = "[email protected] /cdn-cgi/l/email-protection"});
然而,这意味着如果我打电话给GetSingle
方法与任何表达式,都会返回相同的结果。
有没有办法在设置中指定使用什么表达式?
我设法让它发挥作用:
Expression<Func<User, bool>> expr = user => user.EmailAddress == "[email protected] /cdn-cgi/l/email-protection";
_mockUserRepository.Setup(c => c.GetSingle(It.Is<Expression<Func<User, bool>>>(criteria => criteria == expr)))
.Returns(new User { EmailAddress = "[email protected] /cdn-cgi/l/email-protection" });
User result = _mockUserRepository.Object.GetSingle(expr);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)