c# - 如何正确使用 Rhino.Mocks AssertWasCalled()?

标签 c# nunit rhino-mocks assert

我调用 _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"包含使用 rhino mocks 方法可以做的所有事情的简单示例。他还展示了你不能做什么,这对我的学习很有帮助。

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

以下是 Jon 的示例代码中的示例:

新语法:

 [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/

相关文章:

c# - Visual Studio 2013 缩进在编写时不起作用

c# - NUnit 在汇编中找不到测试

unit-testing - 为什么我的 NUnit 测试的执行顺序与列出的顺序不同?

unit-testing - Rhino 模拟,MbUnit : Best way to check if object has raised an event

c# - 用于单元测试的模拟 dll 方法

c# - 端口是从 SQL Server 自动收集的吗?

c# - 在 .NET Core 中使用数据表

c# - 如何从 System.IO.File 调用访问 PSDrive?

c# - 如何确保在每个循环上创建一个新的 Person?

asp.net - 在 ASP.net 中模拟 HttpSessionState 以进行 nunit 测试