为同一方法的两次调用设置两个不同的返回值

时间:2015-07-17 13:52:51

标签: c# moq

假设我有以下情况:

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

2 个答案:

答案 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++);