是否可以使用C#中的Moq从另一个模拟返回一个模拟?
我使用Moq作为我的模拟框架。根据下面的代码,我有两个mock设置,我想设置第二个来返回第一个mock。这可能吗?如果可能的话,我会怎么做?目前,它说被返回的模拟是一个无效的候选人是否可以使用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(
[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; }