如何设置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?

如何设置Stub对象的方法在第一次调用时返回5,然后在第二次调用时返回7 ?

我将这样做,尽管可能有更直接的方法:

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