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

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

T GetSingle(Expression<Func> criteria); 

我正在尝试模拟这样的设置(我意识到这不起作用):

 _mockUserRepository = new Mock<IRepository>(); _mockUserRepository.Setup(c => c.GetSingle(x => x.EmailAddress == "a@b.com")) .Returns(new User{EmailAddress = "a@b.com"}); 

我意识到我将错误的参数传递给设置。
读完这个答案后,我可以通过传递Expression来实现它,就像这样:

 _mockUserRepository.Setup(c => c.GetSingle(It.IsAny<Expression<Func>>()) .Returns(new User{EmailAddress = "a@b.com"}); 

但是,这意味着如果我使用任何表达式调用GetSingle方法,则返回相同的结果。

有没有办法在设置中指定要使用的表达式?

如果您不介意通用设置,它可以更简单。

 _mockUserRepository.Setup(c => c.GetSingle(It.IsAny>>())) .Returns(new User { EmailAddress = "a@b.com" }); 

我设法让这个工作:

 Expression> expr = user => user.EmailAddress == "a@b.com"; _mockUserRepository.Setup(c => c.GetSingle(It.Is>>(criteria => criteria == expr))) .Returns(new User { EmailAddress = "a@b.com" }); User result = _mockUserRepository.Object.GetSingle(expr);