假设我有以下情况:
public interface IFoo
{
int GetNextNumber();
}
public class Foo : IFoo
{
public int GetNextNumber()
{
// returns some next number. The logic of getting the next number is not importaint
}
}
现在,这是我想测试的方法:
public void MethodToTest(IFoo foo)
{
int first = foo.GetNextNumber();
int second = foo.GetNextNumber();
}
我如何设置模拟,我将传递给MethodToTest,以便方法的第一次调用返回1,第二次调用返回2,例如。 棘手的部分是方法的两个调用是无法区分的,所以我不知道如何在“执行顺序”的某些方面设置它们
编辑:我正在使用Moq
答案 0 :(得分:3)
您可以创建一个实现接口的类,并在每次调用方法时递增一个值
public class TestFoo : IFoo
{
private static int i;
public int GetNextNumber()
{
return i++;
}
}
答案 1 :(得分:0)
由于您使用的是Moq框架,因此您甚至不必创建自定义类。
示例:
int i = 1;
Mock<IFoo> MockFoo = new Mock<IFoo>();
MockFoo.Setup(x => x.GetNextNumber()).Returns(i++);