用Rhino Mocks嘲笑一个不可设置的儿童财产

时间:2010-04-22 11:52:47

标签: c# mocking rhino-mocks

我目前的界面很像以下内容:

interface IService
{
   void Start();
   IHandler ServiceHandler { get; }
}

interface IHandler
{
   event EventHandler OnMessageReceived;
}

使用Rhino Mocks,模拟IService很容易,但它不会将任何IHandler实例分配给ServiceHandler属性。因此,当我的测试方法向_mockedService.ServiceHandler.OnMessageReceived添加一个事件处理程序时,我得到一个'对象引用未设置'错误。

如何确保在模拟IService实例中为ServiceHandler分配值?

这很可能是犀牛模拟101,但我只是在加快速度......

1 个答案:

答案 0 :(得分:4)

IService service = MockRepository.GenerateStub<IService>();
IHandler stubHandler = MockRepository.GenerateStub<IHandler>();
service.Stub(s => s.ServiceHandler).Return(stubHandler);

//assertions

或者,如果您需要记录假货的预期,则可以使用GenerateMock。

编辑:对于旧版本的RhinoMocks,您可以这样做:

MockRepository mocks = new MockRepository();
IService service = mocks.CreateStub<IService>();
IHandler handler = mocks.CreateStub<IHandler>();

using (mocks.Record())
{
    SetupResult.For(service.ServiceHandler).Return(handler);
    //setup expectations using Expect.Call
}

using (mocks.Playback())
{
    //assertions
}