2010-08-09 108 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

相关问题