public interface ICell
{
int Value{get;}
void IncrementValue();
}
我希望在RhinoMocks中为这个接口创建一个存根。我有一个只读属性,每次调用IncrementValue()方法时,我都想增加它的值。这可能吗?我不想为这个存根创建一个新类。
public interface ICell
{
int Value{get;}
void IncrementValue();
}
我希望在RhinoMocks中为这个接口创建一个存根。我有一个只读属性,每次调用IncrementValue()方法时,我都想增加它的值。这可能吗?我不想为这个存根创建一个新类。
我有类似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。
我也想到了这个:
cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0);
在得到你的帮助之前,我对 WhenCalled 方法的行为感到困惑... 但我认为你的方法比这个更好。