C# 如何将存根对象的方法设置为在第一次调用时返回5,然后在第二次调用时返回7?

C# 如何将存根对象的方法设置为在第一次调用时返回5,然后在第二次调用时返回7?,c#,.net,unit-testing,rhino-mocks,stub,C#,.net,Unit Testing,Rhino Mocks,Stub,如果您有一个接口: public interface ILuckynumberService { int GetMyLuckyNumber(); } 如果像下面这样为这个接口生成一个存根,如何强制它在第一次调用时返回5,然后在第二次调用时返回7,在第三次调用时返回11 stubLuckyService = MockRepository.GenerateStub<ILuckyService>(); // Now, how to arrange stubLuckyService

如果您有一个接口:

public interface ILuckynumberService
{
   int GetMyLuckyNumber();
}
如果像下面这样为这个接口生成一个存根,如何强制它在第一次调用时返回5,然后在第二次调用时返回7,在第三次调用时返回11

stubLuckyService = MockRepository.GenerateStub<ILuckyService>();
// Now, how to arrange stubLuckyService here?
stubLuckyService=MockRepository.generateSub();
//现在,如何在这里安排stubLuckyService?
可能类似于:

 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());
int[]number=new[]{5,7,11};
var-cnt=0;
Func numberToReturnFunc=()=>{
var numberToReturn=数字[cnt];
cnt=cnt+1;
返回号码返回;
}
stubLuckyService.Stub(y=>y.GetMyLuckyNumber()).Return(numberToReturnFunc());

我自己也没试过,但可以用。它至少编译:)。

以下是我将如何编译,尽管可能有更直接的方法:

var results = new[] {5, 7, 11};
var count = 0;
service.Expect(x => x.GetMyLuckyNumber()).Return(0)
                                         .WhenCalled(x => { 
                                                x.ReturnValue = results[count];
                                                count++;
                                         });

另一个选项是使用Repeat.Once():


如果
GetMyLuckyNumber
采用默认为k-1的最后一个数字参数,那么状态就不那么完整了。请将其作为一个防白痴的示例。
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();