Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用C#中的Moq从另一个模拟返回一个模拟?_C#_Unit Testing_Mocking_Moq - Fatal编程技术网

是否可以使用C#中的Moq从另一个模拟返回一个模拟?

是否可以使用C#中的Moq从另一个模拟返回一个模拟?,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,我使用Moq作为我的模拟框架。根据下面的代码,我有两个mock设置,我想设置第二个来返回第一个mock。这可能吗?如果可能的话,我会怎么做?目前,它说被返回的模拟是一个无效的候选人 [SetUp] private void SetupMarketRow() { var marketTotalRow = new Mock<ITotalRow>(); marketTotalRow.Setup(r => r.TotalBudgetCurrentFact).Returns(

我使用Moq作为我的模拟框架。根据下面的代码,我有两个mock设置,我想设置第二个来返回第一个mock。这可能吗?如果可能的话,我会怎么做?目前,它说被返回的模拟是一个无效的候选人

[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  

}
[设置]
私有void SetupMarketRow()
{
var marketTotalRow=新模拟();
Setup(r=>r.TotalBudgetCurrentFact).Returns(1860716);
设置(r=>r.TotalBudgetVol).Returns(-26);
Setup(r=>r.TotalBudgetPreviousFact).Returns(2514079);
var localMarketReport=new Mock();
localMarketReport.Setup(r=>r.TotalRow).Returns(marketTotalRow);
//瑞德·斯威格利说这是个无效的候选人
}

您可以使用marketTotalRow.Object访问实际模拟的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   

}
[设置]
私有void SetupMarketRow()
{ 
var marketTotalRow=新模拟();
Setup(r=>r.TotalBudgetCurrentFact).Returns(1860716);
设置(r=>r.TotalBudgetVol).Returns(-26);
Setup(r=>r.TotalBudgetPreviousFact).Returns(2514079);
var localMarketReport=new Mock();
localMarketReport.Setup(r=>r.TotalRow).Returns(marketTotalRow.Object);
//瑞德·斯威格利说这是个无效的候选人
}

从更改接口声明

MarketTotalRow TotalRow { get; } 


修复了问题。

谢谢Fletcher。我尝试了这一点,但似乎仍然不起作用,尽管我解决了以下问题,通过从r=>r.TotalRow call.Cheers.fletcher答案返回ITotalRow类型并结合下面的编辑,解决了问题。谢谢。您仍然需要在返回函数中使用模拟对象的Object属性:)
ITotalRow TotalRow { get; }