Moq中有一种新语法允许我使用
从头开始创建模拟var newMock = Mock.Of<IInterface>(m => m.GetSomeValue() == value);
有时候我不会自己创建模拟(例如使用AutoData Theories时)。然后我必须使用旧语法
设置模拟existingMock.Setup(m => m.GetSomeValue()).Returns(value);
我不喜欢这个有两个原因
我更喜欢使用类似
的东西设置现有模拟existingMock.SetupUsingNewSyntax(m => m.GetSomeValue() == value);
我已经知道如何使用Mock.Get<>()
和Mock.Of<>()
,以及模拟和模拟对象是如何相关的。
Moq也是目前为止提供Linq的第一个也是唯一一个框架 模拟,使上述相同的行为可以实现更多 succintly
由于现在有两种方法可以创建和设置一个新的模拟方法,旧的方式和新的 succint 方式,我希望它可以继续使用,还包括设置现有< / em>模拟。
答案 0 :(得分:1)
我已将解决方案代码上传到my Gist。简而言之,gist代码刚刚删除了从原始代码创建模拟instanc的逻辑。为此,我需要访问内部类的MockQueryable<T>
类,因此我使用了.NET反射。
要避免使用反射代码,您可以将MockQueryable<T>
的代码从Moq源复制到测试代码,以及与MockQueryable<T>
相关的一些内部类型(如果需要)。