Можно ли вернуть макет из другого макета, используя Moq в C #? - PullRequest
4 голосов
/ 09 августа 2010

Я использую Moq в качестве основы для насмешек. Согласно приведенному ниже коду, у меня есть две настройки макетов, и я хотел бы настроить второй, чтобы вернуть первый макет. Возможно ли это, и если да, то как мне это сделать? В данный момент говорится, что возвращаемая имитация является недействительным кандидатом.

[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  

}

Ответы [ 2 ]

10 голосов
/ 09 августа 2010

Вы можете получить доступ к фактическому Mocked ITotalRow, используя marketTotalRow.Object.

[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 голосов
/ 09 августа 2010

Изменение объявления интерфейса с

MarketTotalRow TotalRow { get; } 

на ...

ITotalRow TotalRow { get; }

решило проблему.

...