2010-07-19 50 views
2

真的,嘲笑框架和Rhino嘲諷在特定的只有嘲笑接口和虛擬方法的類嗎?例如,我可以模仿以下簡單的類:Mocking none接口類

public class MyClass 
{ 
    void method1() 
    { 
     //some code goes here 
    } 
} 

如果答案是正確的,爲什麼存在這樣的限制?有沒有解決方法?

回答

5

該限制存在,因爲模擬框架不能改變method1而不是虛擬或界面。這是一個合理的限制,因爲接口允許您解耦您的依賴關係,並且是良好代碼的常見特徵,即IMO。不幸的是,大多數.Net框架沒有虛擬方法或接口......這需要醜陋的包裝才能創建接口。

如果你真的不喜歡它,那麼一個模仿框架選項,通過將CLR與一些瘋狂的魔法foo連接起來,可以超越限制。那個名氣被稱爲TypeMock Isolator

+0

您可以繞行使用MS痣類似的方式非界面甚至通話靜,雖然痣仍處於實驗階段,而不是一個完整的模擬框架:http://research.microsoft.com/en- us/projects/moles/ – 2010-07-19 19:39:58

+0

Brian - 我不會真的稱之爲「瘋狂的魔法富」。這只是Microsoft Profiling API(http://msdn.microsoft.com/en-us/library/bb384382%28VS.90%29.aspx)。 :) – PatrickSteele 2010-07-19 22:20:08

+0

@帕特里克斯蒂爾:夠公平的。它只是感覺像瘋狂的魔法foo :) – 2010-07-20 12:36:43

1

我不知道你將如何模擬一個沒有實現接口或虛擬方法的類。如果某些代碼需要MyClass的實例並將其傳遞給MyDerivedMockClass的實例,則MyClass成員將被訪問而不是MyDerivedMockClass成員,因爲它們不是被覆蓋的虛擬成員。