2011-02-08 17 views
1

如果在Rhino.Mocks V3.6中每個連續調用都需要不同的返回值,那麼在方法上設置多個期望的正確方法是什麼?在Rhino.Mocks中設置多個期望方法

以下代碼用於在V3.5中工作,但在V3.6中失敗。

public void Test() 
{ 
    var mocks = new MockRepository(); 

    var process = mocks.DynamicMock<IProcess>(); 
    Expect.Call(process.Run()).Return(1); 
    Expect.Call(process.Run()).Return(2); 

    mocks.ReplayAll(); 

    Assert.That(process.Run(), Is.EqualTo(1)); 
    Assert.That(process.Run(), Is.EqualTo(2)); 

    mocks.VerifyAll(); 
} 

public interface IProcess 
{ 
    int Run(); 
} 

回答

0

我不知道這是否是正確的方法 - 但它的工作原理:)

var queue = new Queue<int>(new [] {1, 2, 3}); 
var mockObject = MockRepository.GenerateMock<IdGenerator>(); 
mockObject.Expect(calc => calc.GetNext()) 
      .Do((Func<int>) queue.Dequeue); 

Console.Out.WriteLine(mockObject.GetNext()); // returns 1 
Console.Out.WriteLine(mockObject.GetNext()); // returns 2 
Console.Out.WriteLine(mockObject.GetNext()); // returns 3 

上次我需要這個,我創建an extension method(雖然MOQ)。制定了相當不錯的我..

_mockClock.Setup(clock => clock.GetCurrentTime()) 
      .ReturnsNextValueFrom(transitionTimestamps); 
+2

我穿過貼在Rhino.Mocks論壇這裏沒有得到答案後,它原來我需要添加`.Repeat.Once()`恢復舊的3.5行爲。謝謝你的想法! – 2011-02-09 11:45:59

相關問題