Ale*_*lex 10 c# linq moq mocking
我的界面上有一个方法,如下所示:
T GetSingle(Expression<Func<T, bool>> criteria);
Run Code Online (Sandbox Code Playgroud)
我正在尝试模拟这样的设置(我意识到这不起作用):
_mockUserRepository = new Mock<IRepository<User>>();
_mockUserRepository.Setup(c => c.GetSingle(x => x.EmailAddress == "a@b.com"))
.Returns(new User{EmailAddress = "a@b.com"});
Run Code Online (Sandbox Code Playgroud)
我意识到我将错误的参数传递给设置.
阅读完这个答案后,我可以通过传递Expression来实现它,就像这样:
_mockUserRepository.Setup(c => c.GetSingle(It.IsAny<Expression<Func<User, bool>>>())
.Returns(new User{EmailAddress = "a@b.com"});
Run Code Online (Sandbox Code Playgroud)
但是,这意味着如果我GetSingle使用任何表达式调用该方法,则返回相同的结果.
有没有办法在设置中指定使用什么表达式?
我设法让这个工作:
Expression<Func<User, bool>> expr = user => user.EmailAddress == "a@b.com";
_mockUserRepository.Setup(c => c.GetSingle(It.Is<Expression<Func<User, bool>>>(criteria => criteria == expr)))
.Returns(new User { EmailAddress = "a@b.com" });
User result = _mockUserRepository.Object.GetSingle(expr);
Run Code Online (Sandbox Code Playgroud)
如果您不介意通用设置,则这样会更简单。
_mockUserRepository.Setup(c => c.GetSingle(It.IsAny<Expression<Func<User, bool>>>()))
.Returns(new User { EmailAddress = "a@b.com" });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5856 次 |
| 最近记录: |