5
public interface ICell
        {
            int Value{get;}

            void IncrementValue();
        }

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

4

3 回答 3

3

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

   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。

于 2011-01-08T05:37:06.623 回答
0

您可以给 rhino 模拟一个 lambda,以便在调用函数时运行。然后这个 lambda 可以增加一个计数器。你可以在这里找到一个例子

于 2011-01-08T02:45:00.823 回答
0

我也想出了这个:

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

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

于 2011-01-08T18:24:12.200 回答