簡體   English   中英

Moq:如何在linq中調用方法謂詞來模擬查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM