2011-07-12 142 views
6

我在我的nUnit測試用例中使用了Moq。如何解決此Moq錯誤? System.Reflection.TargetParameterCountException:參數計數不匹配

這裏是我的測試情況是這樣的:

 IList<ChartFieldDepartment> coaDepartments = new List<ChartFieldDepartment>() { 
       new ChartFieldDepartment { ChartFieldKey="1000", Description="Corporate Allocation"}, 
       new ChartFieldDepartment { ChartFieldKey="1010", Description="Contribution to Capital"} 
     }; 

     Mock<IChartFieldRepository> mockChartFieldRepository = new Mock<IChartFieldRepository>(); 
     mockChartFieldRepository.Setup(x => x.RetrieveChartFieldDepartments(It.IsAny<bool>())).Returns(coaDepartments.AsQueryable); 

     ChartFieldDomainService chartFieldDomainService = new ChartFieldDomainService(mockChartFieldRepository.Object); 

     // this line fails! I get System.Reflection.TargetParameterCountException : Parameter count mismatch 
     IQueryable<ChartFieldDepartment> departments = chartFieldDomainService.RetrieveChartFieldDepartments(); 

這裏是我的ChartFieldDomainService

public class ChartFieldDomainService : IChartFieldDomainService 
{ 
    private IChartFieldRepository _chartFieldRepository = null; 

    public ChartFieldDomainService(IChartFieldRepository repository) 
    { 
     _chartFieldRepository = repository; 
    } 

    public virtual IQueryable<ChartFieldDepartment> RetrieveChartFieldDepartments() 
    { 
     return _chartFieldRepository.RetrieveChartFieldDepartments(true); // always refresh, get latest 
    } 
    //.... 
} 

在此先感謝您的幫助。

編輯:解決方案

以下句法更改修復了問題。

原線路:

 mockChartFieldRepository.Setup(x => x.RetrieveChartFieldDepartments(It.IsAny<bool>())) 
      .Returns(coaDepartments.AsQueryable()); 

更新線路:

 mockChartFieldRepository.Setup(x => x.RetrieveChartFieldDepartments(It.IsAny<bool>())) 
      .Returns((bool x) => coaDepartments.AsQueryable()); 
+0

(這是不是在所有從錯誤信息很明顯。)我不認爲你需要lambda;只需添加括號即可。 – TrueWill

回答

11

將其更改爲

.Returns(coaDepartments.AsQueryable()); 

+1

這是首先導致問題的原因。添加lambda(bool x)=> coaDepartments.AsQueryable()是什麼修復了參數不匹配。 – Raymond

+1

@Raymond:我們所要做的就是您原來的職位。第一個例子顯示'.Returns(coaDepartments.AsQueryable)'。在測試中,我發現它不會運行沒有括號,但會運行括號。 – TrueWill

+2

@TrueWill我一直在看這個錯誤一段時間沒有意識到我忘了()。添加他們解決了我的問題。 – Andy

相關問題