关于堆栈溢出的主题几乎没有类似的问题,但我发现没有任何与Moq相关的问题。
我想要完成的是包装以下查询的“where”部分:
MyObject o = (from mock in Mocks.Of<MyObject>()
where mock.Property == 1
select mock).First();
这样我就可以只用标准传递lambda(即mock.Property == 1部分)。我的第一次(显然是失败的)尝试如下:
public static T GetMockOf<T>(Func<T, bool> predicate) where T : class
{
T obj = (from mock in Mocks.Of<T>()
where predicate(mock)
select mock).First();
return obj;
}
// ...
MyObject o = GetMockOf<MyObject>( mock => mock.Property == 1 );
这是失败的,因为谓词是在无限多次的模拟上调用的 - 无限次数 - 并且代码挂起。我尝试切换到predicate.Invoke()而不是谓词(),但这最终会导致NotSupportedException。
虽然通过堆栈溢出搜索,我注意到人们使用表达式,LinqKit或动态Linq的类似任务的建议,但是,它是非常困难的一个LINQ新秀像我挖到这些话题深度不够。
我想用Moq完成什么?如果是这样,最简单的方法是什么?不确定它是否会改变任何东西,但我使用单声道进行编码,而不是原始.NET。
答案 0 :(得分:1)
Moq v4已经支持这一点。
MyObject o = Mock.Of<MyObject>(mock => mock.Property == 1);