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

C# 为同一方法的两次调用设置两个不同的返回值,c#,moq,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 vo

假设我有以下场景:

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();
    }
例如,如何设置mock(我将把它传递给MethodToTest),以便方法的第一个调用返回1,第二个调用返回2。 棘手的是,该方法的两个调用无法区分,因此我不知道如何按照某种“执行顺序”设置它们


EDIT:我正在使用Moq

您可以创建一个实现接口的类,并在每次调用该方法时增加一个值

public class TestFoo : IFoo
{
    private static int i;
    public int GetNextNumber()
    {
        return i++;
    }
}

因为您使用的是Moq框架,所以您甚至不必创建自定义类

例如:

int i = 1;
Mock<IFoo> MockFoo = new Mock<IFoo>();
MockFoo.Setup(x => x.GetNextNumber()).Returns(i++);
inti=1;
Mock MockFoo=新Mock();
Setup(x=>x.GetNextNumber())。返回(i++);

您应该初始化它:
私有静态int i=0@juanmajmjr:不需要初始化,因为它是一个字段,在这种情况下,它会自动初始化为0,因为它希望返回1和2,但通常建议初始化变量。或者简单地使用
增量前
而不是增量后
会得到相同的结果。为什么字段
i
是静态的?我想这会调用
返回
,它只接受一个
int
。因此,您的
i
变量变得无关紧要。那
呢。返回(()=>i++)
。应该在闭包中捕获变量。
Func
委托实例将由Moq保留并每次调用。