Ale*_*exC 21 c# unit-testing rhino-mocks mocking
我想找出如何模拟一个方法,它在第二次调用它时第二次返回一个不同的值.例如,像这样:
public interface IApplicationLifetime
{
int SecondsSinceStarted {get;}
}
[Test]
public void Expected_mock_behaviour()
{
IApplicationLifetime mock = MockRepository.GenerateMock<IApplicationLifetime>();
mock.Expect(m=>m.SecondsSinceStarted).Return(1).Repeat.Once();
mock.Expect(m=>m.SecondsSinceStarted).Return(2).Repeat.Once();
Assert.AreEqual(1, mock.SecondsSinceStarted);
Assert.AreEqual(2, mock.SecondsSinceStarted);
}
Run Code Online (Sandbox Code Playgroud)
有什么能使这成为可能吗?除了为实现状态机的getter实现一个sub?
干杯fellas,
亚历克斯
k.m*_*k.m 35
您可以使用.WhenCalled方法拦截返回值.请注意,您仍然需要通过.Return方法提供值,但是如果ReturnValue从方法调用更改,Rhino将忽略它:
int invocationsCounter = 1;
const int IgnoredReturnValue = 10;
mock.Expect(m => m.SecondsSinceLifetime)
.WhenCalled(mi => mi.ReturnValue = invocationsCounter++)
.Return(IgnoredReturnValue);
Assert.That(mock.SecondsSinceLifetime, Is.EqualTo(1));
Assert.That(mock.SecondsSinceLifetime, Is.EqualTo(2));
Run Code Online (Sandbox Code Playgroud)
编辑:
周围挖一点多,似乎.Repeat.Once() 不确实在这种情况下工作,可以用来实现相同的结果:
mock.Expect(m => m.SecondsSinceStarted).Return(1).Repeat.Once();
mock.Expect(m => m.SecondsSinceStarted).Return(2).Repeat.Once();
mock.Expect(m => m.SecondsSinceStarted).Return(3).Repeat.Once();
Run Code Online (Sandbox Code Playgroud)
连续呼叫将返回1,2,3.
简单地使用
mock.Expect(m=>m.SecondsSinceStarted).Return(1).Repeat.Once();
mock.Expect(m=>m.SecondsSinceStarted).Return(2).Repeat.Once();
Run Code Online (Sandbox Code Playgroud)
这将1在第一次通话2期间和第二次通话期间返回.至少在RhinoMocks 3.6.0.0上
| 归档时间: |
|
| 查看次数: |
18399 次 |
| 最近记录: |