我试图做一个简单的测试,嘲笑和方法。
我有一个界面:
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
。为什么会这样?
答案 0 :(得分:2)
在您Setup
IsAny(1,2)
中,这些参数与Execute
2,2
您应该使用:
instance.Setup(moq => moq.Sum(It.IsAny<int[]>()).Returns(4));
(有关详细信息,请参阅Setup Method With Params Array)