我似乎在通过示例获取MOQ语法时遇到问题。除了MOQ网站之外,我想建议在哪里查看模拟各种界面的用法。
例如,我想了解我是如何继续模拟这个或那个接口方法,并且能够解决为什么开发人员写这样的事情:
daoMock.Setup(d => d.Get(It.Is<Expression<Func<ConfigurationEntity, bool>>>(e => ExpressionMatchesEntityWithKey(e, TestKey))))
.Returns(new List<ConfigurationEntity> {configEntity});
提前感谢!
答案 0 :(得分:1)
@jakub建议的github页面实际上是一个很好的起点。
无论哪种方式,我都会解释您发布的示例。 假设你有这个界面和这个设置:
public interface IDao
{
IEnumerable<ConfigurationEntity> Get(Expression<Func<ConfigurationEntity, bool>> expression) {...}
}
var daoMock = new Mock<IDao>();
daoMock.Setup(d => d.Get(It.Is<Expression<Func<ConfigurationEntity, bool>>>(e => ExpressionMatchesEntityWithKey(e, TestKey))))
.Returns(new List<ConfigurationEntity> {configEntity});
此设置告诉mock在时返回包含configEntity
的列表:
Get
方法Expression<Func<ConfigurationEntity, bool>>
ExpressionMatchesEntityWithKey(e, TestKey)
(其中e
是作为参数传入的表达式)返回true。所以,基本上,当你在模拟对象上调用Get
方法时,Moq将检查参数是否是正确的类型,检查ExpressionMatchesEntityWithKey(e, TestKey)
是否返回true,然后返回一个包含configEntity
。
默认情况下,如果不满足任何这些要求,模拟对象将返回IEnumerable<ConfigurationEntity>
的默认值,即null
。
现在,您可以检索模拟对象并随意执行任何操作。
IDao dao = daoMock.Object;