如果你有一个界面:
public interface ILuckynumberService
{
int GetMyLuckyNumber();
}
如果你为这个界面生成一个存根,如下所示,你怎么能强制它在第一次调用时返回5,然后在第二次调用时返回7,在第三次调用时返回11?
stubLuckyService = MockRepository.GenerateStub<ILuckyService>();
// Now, how to arrange stubLuckyService here?
答案 0 :(得分:1)
可能是这样的:
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());
我自己没有尝试过,但它可以工作。它至少编译:)。
答案 1 :(得分:1)
以下是我将如何做到这一点,尽管可能有更直接的方式:
var results = new[] {5, 7, 11};
var count = 0;
service.Expect(x => x.GetMyLuckyNumber()).Return(0)
.WhenCalled(x => {
x.ReturnValue = results[count];
count++;
});
答案 2 :(得分:0)
另一种选择是使用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();