使用 Expression> 模拟方法使用最小起订量的参数
我想使用 Moq 来模拟这个接口,
IInterfaceToBeMocked {
IEnumerable<Dude> SearchDudeByFilter(Expression<Func<Dude,bool>> filter);
}
我正在考虑做类似的事情,
_mock.Setup(method => method.SearchDudeByFilter( x=> x.DudeId.Equals(10) && X.Ride.Equals("Harley"))). Returns(_dudes);// _dudes is an in-memory list of dudes.
当我尝试调试需要这种模拟的单元测试时,它说“不允许表达式”指向 lambda。如果有什么区别的话,我使用 xUnit 作为测试框架。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于我来说,以下内容对于 Moq 4.0 Beta
和单元测试效果很好:
现在,如果您将某些内容更改为实际方法调用的参数,则测试将不再通过,因为仅当参数相同时,模拟方法才会返回预期结果:
备注:采用 lambda 表达式的模拟方法是一项新功能,以前没有在以前的版本中,我们需要使用
It.Is
和It.IsAny
参数约束。The following works fine for me with the Moq 4.0 Beta:
and the unit test:
Now if you change something into the argument of actual method call the test will no longer pass because the mocked method will return the expected result only if the argument is the same:
Remark: mocking methods that take lambda expressions is a new feature that was not available in previous versions where we need to use
It.Is<SomeType>
andIt.IsAny<SomeType>
parameter constraints.