为只读属性设置存根行为

5
public interface ICell
        {
            int Value{get;}

            void IncrementValue();
        }

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

3个回答

3

我有类似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。


0
你可以给 Rhino Mocks 一个 lambda 表达式,当函数被调用时它会运行。这个 lambda 表达式可以递增一个计数器。你可以在这里找到一个例子。

我猜马丁的问题是要增加什么... 接口只有一个获取属性,没有设置。 - Pauli Østerø

0

我也想到了这个:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接