真的,嘲笑框架和Rhino嘲諷在特定的只有嘲笑接口和虛擬方法的類嗎?例如,我可以模仿以下簡單的類:Mocking none接口類
public class MyClass
{
void method1()
{
//some code goes here
}
}
如果答案是正確的,爲什麼存在這樣的限制?有沒有解決方法?
真的,嘲笑框架和Rhino嘲諷在特定的只有嘲笑接口和虛擬方法的類嗎?例如,我可以模仿以下簡單的類:Mocking none接口類
public class MyClass
{
void method1()
{
//some code goes here
}
}
如果答案是正確的,爲什麼存在這樣的限制?有沒有解決方法?
該限制存在,因爲模擬框架不能改變method1
而不是虛擬或界面。這是一個合理的限制,因爲接口允許您解耦您的依賴關係,並且是良好代碼的常見特徵,即IMO。不幸的是,大多數.Net框架沒有虛擬方法或接口......這需要醜陋的包裝才能創建接口。
如果你真的不喜歡它,那麼一個模仿框架選項,通過將CLR與一些瘋狂的魔法foo連接起來,可以超越限制。那個名氣被稱爲TypeMock Isolator。
我不知道你將如何模擬一個沒有實現接口或虛擬方法的類。如果某些代碼需要MyClass的實例並將其傳遞給MyDerivedMockClass的實例,則MyClass成員將被訪問而不是MyDerivedMockClass成員,因爲它們不是被覆蓋的虛擬成員。
Typemock是你最好的選擇。
您可以繞行使用MS痣類似的方式非界面甚至通話靜,雖然痣仍處於實驗階段,而不是一個完整的模擬框架:http://research.microsoft.com/en- us/projects/moles/ – 2010-07-19 19:39:58
Brian - 我不會真的稱之爲「瘋狂的魔法富」。這只是Microsoft Profiling API(http://msdn.microsoft.com/en-us/library/bb384382%28VS.90%29.aspx)。 :) – PatrickSteele 2010-07-19 22:20:08
@帕特里克斯蒂爾:夠公平的。它只是感覺像瘋狂的魔法foo :) – 2010-07-20 12:36:43