【问题标题】:Stub the behavior of a readOnly property存根只读属性的行为
【发布时间】:2011-01-08 02:39:08
【问题描述】:
public interface ICell
        {
            int Value{get;}

            void IncrementValue();
        }

我想在 RhinoMocks 中为这个接口创建一个存根。 我有一个只读属性,我想在每次调用 IncrementValue() 方法时增加他的值。这可能吗?我不想为此存根创建一个新类。

【问题讨论】:

    标签: c# rhino-mocks stub


    【解决方案1】:

    我和 Jay 有类似的提议,只是更短一些。不确定这是否有一些缺点。

       int count = 0;
    
        var mock = MockRepository.GenerateStub<ICell>();
        mock.Stub(p => p.Value).WhenCalled(a => a.ReturnValue = count).Return(42);
        mock.Stub(p => p.IncrementValue()).WhenCalled(a => {
            count = (int)count+1; 
        });
    

    Return(42) 被放在那里说“值返回一些东西,不要扔”,并且 WhenCalled(a => a.ReturnValue = count) 用当前计数值覆盖返回值 42。

    【讨论】:

      【解决方案2】:

      你可以给 rhino mocks 一个 lambda 在函数 get 被调用时运行。然后这个 lambda 可以增加一个计数器。你可以找到一个例子here

      【讨论】:

      • 我猜马丁的问题是要增加什么......接口只有一个get-property,没有设置
      【解决方案3】:

      我也想出了这个:

      cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0);
      

      在你的帮助之前,我对 WhenCalled 方法的行为感到困惑......但我认为你的方法比这个更好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 2010-12-02
        • 1970-01-01
        相关资源
        最近更新 更多