[英]Moq: how to call method predicate inside linq to mocks query?
關於堆棧溢出的話題,幾乎沒有類似的問題,但是我發現與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()而不是predicate(),但這最終導致NotSupportedException。
在搜索Stack Overflow時,我注意到人們建議使用Expressions,LinqKit或Dynamic Linq來完成類似的任務,但是,對於像我這樣的Linq新手來說,要深入研究這些主題非常困難。
Moq是否可以實現我想要完成的任務? 如果是這樣,最簡單的方法是什么? 不知道它是否會改變任何東西,但是我在編碼時使用的是mono,而不是原始的.NET。
Moq v4已支持此功能。
MyObject o = Mock.Of<MyObject>(mock => mock.Property == 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.