【问题标题】:Mocking a non-settable child property with Rhino Mocks使用 Rhino Mocks 模拟不可设置的子属性
【发布时间】:2010-04-22 11:52:46
【问题描述】:

我目前有如下界面:

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

interface IHandler
{
   event EventHandler OnMessageReceived;
}

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

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

这可能是 Rhino Mocks 101,但我只是加快速度...

【问题讨论】:

    标签: c# mocking rhino-mocks


    【解决方案1】:
    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
    }
    

    【讨论】:

    • 我猜 RM 3.3(不幸的是我被卡住了)不支持你所拥有的扩展方法语法 - 关于 3.3 语法的任何想法来实现同样的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多