2012-01-06 83 views
3

我有以下函數功能方法,我需要模擬關閉如何創建一個起訂量爲模擬一個Func鍵

Func<Owned<ISomeInterface>> someMethod { get; set; } 

,但無法弄清楚如何使用「起訂量」的框架來嘲笑它。

我已閱讀了類似post SO上,但仍不能似乎嘲笑它關閉,它總是回來與

表達不是一個方法調用:X =>調用(x.someMethod)

甲匹配的構造對於給定的參數沒有在 嘲笑類型中找到。 ----> System.MissingMethodException:找不到 類型的'擁有的`1Proxy40a9bf91815d4658ad2453298c903652'的構造函數。

+1

我已經閱讀計算器 – 2012-01-06 09:27:53

+0

一個相關的帖子難道說這個問題應該被關閉所包含的對象的屬性作爲重複?請澄清,如果這個問題已經解決.. – MattDavey 2012-01-06 09:33:16

+1

對不起,這篇文章似乎沒有幫助我,因爲它不適合我。我的意思是編輯問題,但意外添加了評論。我現在更新了這個問題 – 2012-01-06 09:35:07

回答

5

設定的功能被定義爲一個屬性,所以你應該在起訂量

public interface IPersona 
{ 
    string nome { get; set; } 
    string cognome { get; set; } 
    Func<Owned<ISomeInterface>> somemethod { get; set; } 

} 

使用SetupSet。在您的測試:

您創建的函數功能一個模擬:

Func<Owned<ISomeInterface>> somemethodMock =() => new Mock<Owned<ISomeInterface>>().Object; 

那麼你設置的模擬包含了函數功能作爲一個屬性,你設置的設置方法的預期類:

var obj = new Mock<IMyInterface>(); 
obj.SetupSet(x => x.somemethod = somemethodMock).Verifiable(); 

您創建模擬容器對象:

//We pass the mocked object to the constructor of the container class 
var container = new Container(obj.Object); 
container.AnotherMethod(somemethodMock); 
obj.VerifyAll(); 

這裏是d Container類的另一種方法的efinition,如果得到FUNC作爲輸入參數,並將其設置爲

enter public class Container 
{ 
    private IPersona _persona; 

    public Container(IPersona persona) 
    { 
     _persona = persona; 
    } 

    public void AnotherMethod(Func<MyClass<IMyInterface>> myFunc) 
    { 
     _persona.somemethod = myFunc; 
    }  
} 
+1

謝謝,這似乎工作。我現在卡在代碼的下一行哈哈,我有一個靜態方法從另一個程序集調用...它會永遠結束;-) – 2012-01-06 15:13:04

+0

這是痛苦的:)看看這個:http:// blogs.clariusconsulting.net/kzu/how-to-mock-extension-methods/它涵蓋了擴展方法,但它應該適合考慮到它們是靜態的,希望它有幫助。 – 2012-01-06 15:27:20

+1

AutofacContrib.Moq.dll允許你用Funcs等進行模擬操作,並且似乎完成了這個技巧 – 2012-01-19 11:27:11

相關問題