.NET MOQ返回不同的结果

时间:2016-06-25 16:53:38

标签: c# .net moq

我试图做一个简单的测试,嘲笑和方法。

我有一个界面:

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

使用此界面的类:

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

测试类:

    [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,但在我的MOQ中,我设置了4。为什么会这样?

1 个答案:

答案 0 :(得分:2)

在您Setup IsAny(1,2)中,这些参数与Execute 2,2

上的参数不符

您应该使用:

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

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