Rhino Mocks - установить свойство, если вызывается метод - PullRequest
8 голосов
/ 29 августа 2009

Есть ли способ с Rhino Mocks установить свойство заглушки, если метод вызывается.

Примерно так: (Поддельный код выделен жирным шрифтом)

callMonitor.Expect (x => x.HangUp ()). SetProperty (callMonitor.InACall = false) ;

Метод HangUp возвращает void, и я не могу этого изменить. Но я хочу, чтобы моя заглушка знала, что вызов был прерван при вызове HangUp.

Ответы [ 4 ]

11 голосов
/ 29 августа 2009

Вы можете использовать метод WhenCalled для запуска собственного кода при вызове заглушки; Я уверен, что это должно работать и с Mocks. Согласно документации, WhenCalled является заменой / обновлением для Callback.

callMonitor.Expect(x => x.HangUp())
.WhenCalled(invocation => callMonitor.InCall = false);

Некоторая информация в конце этого поста: http://grahamnash.blogspot.com/2008/10/rhino-mocks-35.html

1 голос
/ 29 августа 2009

Да , вы можете использовать метод Обратный вызов :

 callMonitor.Expect(x => x.HangUp()).Callback(() => callMonitor.InCall = false);
1 голос
/ 29 августа 2009

Могут быть некоторые условия, при которых вам нужно будет это сделать, но, как правило, я ожидаю, что вы просто оснастите свой макет / заглушку так, чтобы он возвращал правильные значения в ответ на ваш код. Единственные исключения из этого, о которых я могу подумать, это частичные макеты, когда вы тестируете одну часть класса и хотите издеваться над другими частями.

Установить насмешку над свойством довольно просто.

callMonitor.Expect( x => x.HangUp() );
callMonitor.Expect( x => x.InACall ).Return( false );

Если callMonitor - заглушка, то вы можете установить свойство напрямую.

callMonitor.Stub( x => x.HangUp() );
callMonitor.InACall = false;
0 голосов
/ 29 августа 2009

Я не эксперт по RhinoMocks, но я считаю, что это должно сработать.

SetupResult.For(callMonitor.InACall).Return(false);
...