2014-03-25 26 views
0

如果一個類沒有接口,我可以使用存根嗎?如果類沒有接口,我可以使用Fakes stub?

我想存根類的方法。該類沒有界面。這個班級在Fakes intellisense中作爲存根存在。該方法也有,但是當我試圖嘲弄的方法,我得到的設計時錯誤:

Cannot assign to 'MyMethod' because it is a 'method group' 

代碼

StubClassA classAStub = new StubClassA(); 
classAStub.MyMethod = (paramA, paramB) => {return 10;}; 

這是發生因爲類沒有的界面?爲什麼在這種情況下產生存根?

是我唯一的選擇使用墊片?

回答

4

Fakes爲程序集中的每個非密封類創建存根,併爲每個可覆蓋的方法存根。存根是純粹的基於遺傳的,沒有涉及魔法。如果MyMethod能夠被存根,它將顯示爲名爲MyMethodParamType1ParamType2的代表性屬性。

如果您想覆蓋正常代碼無法覆蓋的內容,則需要墊片。 Shims在運行時使用某種晦澀的魔法來修改IL,並用代表替換方法。一般來說,它們的使用意味着代碼中可能存在的一個弱點,但無論如何,您可能都會很好。

我個人會建議使用一個接口,如果類型真的需要獨立於它的契約,這是你的問題所暗示的。

+0

「獨立於合同」如前所述,班級背後沒有界面。您的回答沒有提供任何有關錯誤的附加信息。 – 4thSpace

+1

它解釋了什麼是錯的。按照我的答案,沒有任何密封的會有一個存根委託,而在C#中,方法默認是封閉的。 – Magus

相關問題