如果调用方法,有没有办法让Rhino Mocks设置Stub的属性。
这样的事情:(粗体假冒代码)
callMonitor.Expect(x => x.HangUp())。 SetProperty(callMonitor.InACall = false);
HangUp方法返回void,我无法真正改变它。但我希望我的存根知道在调用HangUp时挂断电话。
答案 0 :(得分:11)
您可以使用“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 :(得分:1)
在某些情况下,您可能需要这样做,但通常我希望您只需检测您的模拟/存根,以便它返回正确的值以响应您的代码。我能想到的唯一例外是部分模拟,你正在测试一个类的一部分,并想要模拟其他部分。
在属性上设置模拟非常简单。
callMonitor.Expect( x => x.HangUp() );
callMonitor.Expect( x => x.InACall ).Return( false );
如果callMonitor
是存根,则可以直接设置属性。
callMonitor.Stub( x => x.HangUp() );
callMonitor.InACall = false;
答案 2 :(得分:1)
是,您可以使用回拨方法:
callMonitor.Expect(x => x.HangUp()).Callback(() => callMonitor.InCall = false);
答案 3 :(得分:-1)
我不是RhinoMocks专家,但我相信这应该有用。
SetupResult.For(callMonitor.InACall).Return(false);