Moq - 存储库中的 Linq 表达式 - 在设置中指定表达式

2023-12-27

我的界面上有一个方法,如下所示:

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(使用前将#替换为@)

Moq - 存储库中的 Linq 表达式 - 在设置中指定表达式 的相关文章

随机推荐