2010-01-21 39 views
1

使用RhinoMocks - 我怎么能说“从现在开始调用某个函数 - 它应该返回一些值”。RhinoMocks - 指定稍后调用函数的返回

我想说的是这样的:

fakeCalculator.WhenCalled(factory => factory.AddNumbers(1, 2)).Return(3); 

然后 - 当的addNumbers函数调用1和2 - 它将返回3.即我想先定义它,然后触发该函数。原因是我依赖这种行为来模拟注入到另一个类 - 它将再次调用AddNumbers函数。

回答

1

事情是这样的:

MockRepository mocks = new MockRepository(); 
IFactory factory = mocks.DynamicMock<IFactory>(); 

using(mocks.Record()) { 
    factory.AddNumbers(1, 2); 
    LastCall.Return(3); 

    factory.AddNumbers(2, 3); 
    LastCall.Return(5); 
} 

int result = factory.AddNumbers(1, 2); 
Assert.AreEqual(3, result); 

result = factory.AddNumbers(2, 3); 
Assert.AreEqual(5, result); 
+0

完全一样。谢谢!之前没有使用Record功能.. – stiank81 2010-01-21 21:24:42

+1

@ stiank81:这是一个非常甜美的功能。你也可以说'LastCall.Throw(someException)'或'LastCall.Do(someDelegate)'真的有一些乐趣。 – jason 2010-01-21 21:29:45

+0

酷,杰森!显然,在犀牛学习还有一些好的东西! :-) – stiank81 2010-01-21 21:43:47