Как я могу установить метод объекта-заглушки для возврата 5 при первом вызове, а затем 7 при втором вызове? - PullRequest
0 голосов
/ 21 декабря 2011

если у вас есть интерфейс:

public interface ILuckynumberService
{
   int GetMyLuckyNumber();
}

И если вы сгенерируете заглушку для этого интерфейса, как показано ниже, как вы можете заставить его возвращать 5 при первом вызове, затем 7 при втором и 11на третий звонок?

stubLuckyService = MockRepository.GenerateStub<ILuckyService>();
// Now, how to arrange stubLuckyService here?

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Вот как я бы это сделал, хотя может быть более прямой способ сделать это:

var results = new[] {5, 7, 11};
var count = 0;
service.Expect(x => x.GetMyLuckyNumber()).Return(0)
                                         .WhenCalled(x => { 
                                                x.ReturnValue = results[count];
                                                count++;
                                         });
1 голос
/ 21 декабря 2011

Может быть, что-то вроде:

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

Я сам не пробовал, но это может сработать.Компилируется как минимум:).

0 голосов
/ 07 января 2012

Другой вариант - использовать 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();
...