2010-08-09 48 views
4

我正在使用Moq作爲我的嘲笑框架。根據下面的代碼,我有兩個模擬設置,我想設置第二個返回第一個模擬。這是可能的,如果是的話,我會怎麼做呢?目前它說模擬被返回是一個無效的候選人。是否有可能使用Moq在C#中從另一個模擬中返回一個模擬?

[SetUp] 
private void SetupMarketRow() 
{ 
    var marketTotalRow = new Mock<ITotalRow>(); 
    marketTotalRow.Setup(r => r.TotalBudgetCurrentFact).Returns(1860716); 
    marketTotalRow.Setup(r => r.TotalBudgetEvol).Returns(-26); 
    marketTotalRow.Setup(r => r.TotalBudgetPreviousFact).Returns(2514079); 


    var localMarketReport = new Mock<IReport>(); 
    localMarketReport.Setup(r => r.TotalRow).Returns(marketTotalRow); 
    // Red swiggley here saying invalid candidate 

} 

回答

10

您可以使用marketTotalRow.Object訪問實際的Mocked ITotalRow。

[SetUp] 
private void SetupMarketRow() 
{ 
    var marketTotalRow = new Mock<ITotalRow>(); 
    marketTotalRow.Setup(r => r.TotalBudgetCurrentFact).Returns(1860716); 
    marketTotalRow.Setup(r => r.TotalBudgetEvol).Returns(-26); 
    marketTotalRow.Setup(r => r.TotalBudgetPreviousFact).Returns(2514079); 


    var localMarketReport = new Mock<IReport>(); 
    localMarketReport.Setup(r => r.TotalRow).Returns(marketTotalRow.Object); 
    // Red swiggley here saying invalid candidate 

} 
+0

謝謝弗萊徹。我試過這個,似乎仍然沒有工作,雖然我通過從r => r.TotalRow call.Cheers中返回ITotalRow的類型,發現問題如下。 – Matt 2010-08-09 13:57:08

+0

Fletchers與我的編輯結合在一起回答,解決了問題。謝謝。 – Matt 2010-08-15 15:25:51

0

MarketTotalRow TotalRow { get; } 

不斷變化的接口聲明...

ITotalRow TotalRow { get; } 

解決了這一問題。

+2

您仍然需要使用Returns函數中的Mock 對象的Object屬性:) – fletcher 2010-08-09 14:09:28

相關問題