2016-06-25 96 views
0

我正在尝试做一个简单的测试,嘲笑sum方法。.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); 
    } 

的问题是,当我打电话执行方法,它正在退回0,但在我的最小起订量中,我正在设置4。为什么会发生?

+0

这是'Returns()'在正确的地方打电话吗? –

回答

2

在你Setup你说IsAny(1,2),这些参数不上Execute这是2,2

而应该使用匹配的参数:

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

(更多信息请参见Setup Method With Params Array

+0

它的工作,谢谢 –