我叫_mocks.ReplayAll(),然后叫一个或多个_mockedObject.AssertWasCalled(),然后叫_mocks.VerifyAll()。但是它告诉我“当模拟对象处于记录状态时,此操作无效”。

[Test]
public void SetStateExecuting_Should_Set_State_To_Pause_And_Not_Change_GlobalState_When_GlobalState_Is_Paused()
{
    var task = new Task { ID = 1, TimeZone = -660, GlobalState = TaskState.Paused };
    _taskDataProvider.Expect(p => p.StateUpdate(task.ID, task.TimeZone, TaskState.Paused));
    _mockRepository.ReplayAll();
    _manager.SetStateExecuting(task);
    _taskDataProvider.AssertWasNotCalled(p => p.GlobalStateUpdate(task.ID,
                                                                  TaskState.Executing));
    _mockRepository.VerifyAll();
}

使这些方法正确工作的正确调用顺序是什么?

最佳答案

乔恩·克鲁格(Jon Kruger)的博客文章"How to use rhino mocks documented through tests"给出了犀牛模拟方法可以做的所有简单示例。他还展示了您不能做的事情,这些对我的学习很有帮助。

如前所述,使用带有静态构造函数的Arrange,Act,Assert语法更容易阅读。博客文章显示了这两种方法的示例。

以下是乔恩的示例代码中的示例:

新语法:

 [Test]
    public void You_can_check_to_see_if_a_method_was_called()
    {
        var stub = MockRepository.GenerateStub<ISampleClass>();

        stub.MethodThatReturnsInteger("foo");

        stub.AssertWasCalled(s => s.MethodThatReturnsInteger("foo"));
        stub.AssertWasCalled(s => s.MethodThatReturnsInteger(Arg<string>.Is.Anything));
    }

老式:
    [Test]
    public void Calling_virtual_methods_will_call_the_actual_method()
    {
        var mockRepository = new MockRepository();
        var sampleClass = mockRepository.PartialMock<SampleClass>();
        sampleClass.Replay();

        sampleClass.VirtualMethod("foo").ShouldEqual(3);
        sampleClass.VirtualMethodWasCalled.ShouldBeTrue();
        sampleClass.AssertWasCalled(c => c.VirtualMethod("foo"));
    }

关于c# - 如何正确使用Rhino.Mocks AssertWasCalled()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3116851/

10-14 15:34
查看更多