Заглушить поведение свойства readOnly - PullRequest
5 голосов
/ 08 января 2011
public interface ICell
        {
            int Value{get;}

            void IncrementValue();
        }

Я хочу создать заглушку для этого интерфейса в RhinoMocks.У меня есть свойство только для чтения, и я хочу увеличивать его значение каждый раз, когда вызываю метод IncrementValue ().Это возможно?Я не хочу создавать новый класс для этой заглушки.

Ответы [ 3 ]

3 голосов
/ 08 января 2011

У меня есть подобное предложение с Джеем, только короче.Не уверен, что у этого есть какие-то недостатки, поэтому.

   int count = 0;

    var mock = MockRepository.GenerateStub<ICell>();
    mock.Stub(p => p.Value).WhenCalled(a => a.ReturnValue = count).Return(42);
    mock.Stub(p => p.IncrementValue()).WhenCalled(a => {
        count = (int)count+1; 
    });

Return (42) помещается туда, чтобы сказать «Значение возвращает что-то, не бросайте», и переопределение WhenCalled (a => a.ReturnValue = count)которые возвращают вейл 42 с текущим значением счета.

0 голосов
/ 08 января 2011

Я тоже придумал это:

cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0);

Перед вашей помощью меня смутило поведение метода WhenCalled ... но я думаю, что ваш подход лучше, чем этот

0 голосов
/ 08 января 2011

Вы можете задать лямбда-носители для запуска rhino при вызове функции get. Эта лямбда может затем увеличить счетчик. Вы можете найти пример здесь

...