2010-01-21 70 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