在Rhino.Mocks中为方法设置多个期望

时间:2011-02-08 16:21:01

标签: c# unit-testing rhino-mocks expect

如果在Rhino.Mocks V3.6中每次连续调用需要不同的返回值,那么在方法上设置多个期望的正确方法是什么?

以下代码用于在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();
}

1 个答案:

答案 0 :(得分: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);