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

本文关键字:两个 返回值 设置 调用 同一个 两次 方法 | 更新日期: 2023-09-27 18:03:18

假设我有以下场景:

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。棘手的部分是该方法的两次调用是无法区分的,所以我不知道如何在某种"执行顺序"中设置它们

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