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保留并每次调用。