2016-12-01 116 views
0
BTPhysicalAccount testerInstance = new BTPhysicalAccount(IvirtualAccounts, BTmarketIn, int); 

我想測試這個類的方法。 BTmarketIn是一個具體的類,並且該類中的方法被用於該方法中。所以,我需要嘲笑那個方法,因此我想這:部分嘲諷具體類的方法

 var readerAsk = Substitute.ForPartsOf<BTMarketInfo>(); 
     readerAsk.When(x => x.GetAskPrice(Arg.Any<SymbolType>())).DoNotCallBase(); 
     readerAsk.GetAskPrice(Arg.Any<SymbolType>()).Returns(2000); 
     readerAsk.When(x => x.GetBidPrice(Arg.Any<SymbolType>())).DoNotCallBase(); 
     readerAsk.GetBidPrice(Arg.Any<SymbolType>()).Returns(2000); 

它不停拋出空異常錯誤和一些研究之後,我意識到,你不能嘲笑非虛方法。 所以我確實有BTMarketIn類IMarketInfo的接口類。現在我可以模擬這個接口的一個實例,但我需要一個BTMarketIn實例作爲構造函數參數傳遞。我該如何解決這個問題?

+0

你可以重構傳遞一個'IMarketInfo'到你指的是什麼構造?目前,它聽起來像'BTMarketInfo'和你正在測試的類是緊密耦合的。如果您可以重構目標類以將「IMarketInfo」引入構造函數而不是「BTMarketInfo」,那麼您的狀態會更好。 – wablab

+0

不重構不是一種選擇,否則我可以簡單地使方法變爲虛擬並嘲笑它們。沒有其他辦法嗎? –

+0

您可以使用Microsoft Fakes Shims:https://msdn.microsoft.com/en-us/library/hh549175.aspx#shims。我沒有與他們有任何經驗,但我認爲這是他們的用途。 – wablab

回答