代码之家  ›  专栏  ›  技术社区  ›  LJW

用Rhino Mocks模拟不可设置的子属性

  •  2
  • LJW  · 技术社区  · 15 年前

    我目前有如下界面:

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

    使用Rhino mock,可以很容易地模拟IService,但它不指定任何 IHandler 实例到 ServiceHandler 财产。因此,当我的被测方法将事件处理程序添加到 _mockedService.ServiceHandler.OnMessageReceived ,我得到一个“Object reference not set”错误。

    如何确保ServiceHandler在mocked中被赋值 IService

    1 回复  |  直到 15 年前
        1
  •  4
  •   Lee    15 年前
    IService service = MockRepository.GenerateStub<IService>();
    IHandler stubHandler = MockRepository.GenerateStub<IHandler>();
    service.Stub(s => s.ServiceHandler).Return(stubHandler);
    
    //assertions
    

    或者,如果需要记录对假货的期望值,可以使用GenerateMock。

    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
    }