.NET MOQ 返回不同的结果

.NET MOQ returning a different result

我正在尝试做一个简单的测试,模拟 sum 方法。

我有一个接口:

public interface ISumSomething
{
    int Sum(params int[] values);
}

一个class使用这个接口:

public class CallSum
{
    public CallSum(ISumSomething sumSomething)
    {
        this.SumSomething = sumSomething;
    }

    private ISumSomething SumSomething { get; set; }

    public int Execute(params int[] values)
    {
        return this.SumSomething.Sum(values);
    }
}

和测试class:

    [TestMethod]
    public void Test_Sum_Method()
    {
        // Creates MOQ.
        var instance = new Mock<ISumSomething>();

        // Setup de MOQ.
        instance.Setup(moq => moq.Sum(It.IsAny(1,2)).Returns(4));

        // Instance the object.
        var sum = new CallSum(instance.Object);

        // Execute the operation.
        var result = sum.Execute(2, 2);

        // Check the result.
        Assert.AreEqual(4, result);
    }

问题是,当我调用 Execute 方法时,它正在返回 0,但在我的最小起订量中,我正在设置 4。为什么会这样?

在你的 Setup 中你说 IsAny(1,2),这些参数与 Execute 上的参数不匹配 2,2

您应该改用:

    instance.Setup(moq => moq.Sum(It.IsAny<int[]>()).Returns(4));

(有关详细信息,请参阅 Setup Method With Params Array