如何设置Stub对象的方法在第一次调用时返回5,然后在第二次调用时返回7 ?
本文关键字:返回 调用 何设置 然后 第二次 对象 Stub 方法 第一次 设置 | 更新日期: 2023-09-27 18:18:41
如果你有一个接口:
public interface ILuckynumberService
{
int GetMyLuckyNumber();
}
如果您像下面这样为这个接口生成一个存根,您如何强制它在第一次调用时返回5,然后在第二次调用时返回7,在第三次调用时返回11 ?
stubLuckyService = MockRepository.GenerateStub<ILuckyService>();
// Now, how to arrange stubLuckyService here?
我将这样做,尽管可能有更直接的方法:
var results = new[] {5, 7, 11};
var count = 0;
service.Expect(x => x.GetMyLuckyNumber()).Return(0)
.WhenCalled(x => {
x.ReturnValue = results[count];
count++;
});
可能是这样的:
int[] numbers = new[] {5, 7, 11};
var cnt = 0;
Func<int> numberToReturnFunc = () => {
var numberToReturn = numbers[cnt];
cnt = cnt+1;
return numberToReturn;
}
stubLuckyService.Stub(y => y.GetMyLuckyNumber()).Return(numberToReturnFunc());
我自己没有试过,但它可以工作。它至少编译:).
另一个选择是使用Repeat.Once():
service.Expect(x => x.GetMyLuckyNumber()).Return(5).Repeat.Once();
service.Expect(x => x.GetMyLuckyNumber()).Return(7).Repeat.Once();
service.Expect(x => x.GetMyLuckyNumber()).Return(11).Repeat.Once();