如何解决Moq错误?System.Reflection.TargetParameterCountException: 参数计数不匹配。

6

我在nUnit测试用例中使用了Moq。

以下是我的测试用例示例:

        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());

我认为你不需要使用lambda表达式;只需添加括号即可。 - TrueWill
1个回答

11

将其更改为

.Returns(coaDepartments.AsQueryable());

(这在错误信息中根本不显而易见。)


1
这就是问题的根源。添加 lambda (bool x) => coaDepartments.AsQueryable() 是解决参数不匹配的方法。 - Raymond
1
@Raymond:我们所依据的只有你最初的帖子。第一个示例显示.Returns(coaDepartments.AsQueryable)。在测试中,我发现没有括号它无法运行,但有括号时可以运行。 - TrueWill
2
@TrueWill 我一直在看这个错误,却没有意识到我忘记了括号。加上括号解决了我的问题。 - Andy
不加括号会导致构建不稳定。通过添加括号或写成 ()=>results.ToList() 来解决问题。有人知道为什么需要这个括号吗? - mehul9595

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接