這篇文章要求基類方法是虛擬的:question link。驗證基類中的非虛方法是使用Moq調用的
這對我不起作用,因爲基類方法不是虛擬的(我沒有編寫它,也沒有源代碼)。
如何模擬並驗證基類方法是否被調用,如果它們不是虛擬的?
最後的標準 - 我正在Mac上開發使用Xamarin Studio。 Moq的工作正常,但其他框架,如TypeMock或JustMock(Windows安裝程序)將無法正常工作。
這篇文章要求基類方法是虛擬的:question link。驗證基類中的非虛方法是使用Moq調用的
這對我不起作用,因爲基類方法不是虛擬的(我沒有編寫它,也沒有源代碼)。
如何模擬並驗證基類方法是否被調用,如果它們不是虛擬的?
最後的標準 - 我正在Mac上開發使用Xamarin Studio。 Moq的工作正常,但其他框架,如TypeMock或JustMock(Windows安裝程序)將無法正常工作。
這是不可能的。由於Moq的工作方式,Moq不會嘲笑非虛擬方法。
你嘲笑類類型YourClass
直接,其中YourClass
從BaseClass
派生,並BaseClass
有這個(public
?)無虛非靜態你感興趣的方法?所以你的模擬有Mock<YourClass>
,而不是Mock<IYourClass>
其中IYourClass
是一個接口?
您是否嚴格需要使用BaseClass
作爲基類,而不是「構成」(類型爲BaseClass
的字段屬於您的類)?
如上所述,Moq只能模擬虛擬方法。
一個可能的最終運行是將您的un-moqable類包裝在代理中,並在代碼中使用此代理。
public class MyUnMoqableClass {
public string GetValue() {
return "Hello World";
}
}
public interface IMyUnMoqableClassProxy {
string GetValue();
}
public class UnMoqableClassProxy : IMyUnMoqableClassProxy {
private readonly MyUnMoqableClass _myUnMoqableClass;
public UnMoqableClassProxy(MyUnMoqableClass myUnMoqableClass) {
_myUnMoqableClass = myUnMoqableClass;
}
public string GetValue() {
return _myUnMoqableClass.GetValue();
}
}
,如果你對unmoqable類大接口,但沒有讓一個隔離的客戶端代碼它可以是一個有點(很多)乏味。
是的,這是我最終做的 - 我必須隔離moq無法解鎖的類。謝謝。 – IUnknown
Duplicate http://stackoverflow.com/questions/11738102/how-to-mock-non-virtual-methods –
@StuartLC刪除。錯誤的粘貼。 – Rwiti
@JuanLopes感謝您的鏈接,但由於我在Mac上使用Xamarin Studio,我不相信這些產品會起作用。 – IUnknown