21
我想測試我的類的方法A,但不調用通常由A調用的實際方法B.這是因爲B有很多外部交互,我現在不想測試。模擬Moq中正在測試的主題的方法?
我可以爲B所調用的所有服務創建嘲笑,但這是相當的工作。我寧願嘲笑B,讓它返回樣本數據。
Moq框架有可能嗎?
我想測試我的類的方法A,但不調用通常由A調用的實際方法B.這是因爲B有很多外部交互,我現在不想測試。模擬Moq中正在測試的主題的方法?
我可以爲B所調用的所有服務創建嘲笑,但這是相當的工作。我寧願嘲笑B,讓它返回樣本數據。
Moq框架有可能嗎?
這是,趕上! 您必須確保方法B
是虛擬的並且可以被重寫。
然後,設置模擬以在不提供設置時調用基本方法。然後您設置B
,但不要設置A
。由於A
未設置,因此將調用實際的實現。
var myClassMock = new Mock<MyClass>();
myClassMock.Setup(x => x.B()); //mock B
myClassMock.CallBase = true;
MyClass obj = myClassMock.Object;
obj.A(); // will call the actual implementation
obj.B(); // will call the mock implementation
屁股的場面,起訂量,動態地創建一個擴展MyClass
和覆蓋B
類。
準確地說,如果'virtual'方法'B'是'protected internal'或'public',它將會是最簡單的。 –
問題:CallBase = true是什麼;做? – Hace
@Hace如果我沒有記錯,它會告訴模擬對象調用'MyClass'中定義的方法,除非提供了明確的設置。如果你沒有調用'CallBase = true',那麼無論是否提供了明確的設置,Moq都會調用虛擬方法的虛擬實現。 – dcastro