Rhino Mocks Record Playback语法

时间:2009-05-23 11:19:01

标签: rhino-mocks

帮助,任何人都可以帮助解释Rhino Mocks'Record'范围的目的吗?

我假设在范围内设置的期望只会被验证,但是一旦你创建了模拟对象,Rhino Mocks就处于'记录模式',所以我现在不确定Record范围的目的

这是我的一个例子:

    private static void SomeTest()
    {
        MockRepository mockRepository = new MockRepository();
        ISomeInterface test = mockRepository.StrictMock<ISomeInterface>();

        test.Bar();

        using (mockRepository.Record())
        {
            Expect.Call<string>(test.GetFoo()).Return("Hello");
        }

        using (mockRepository.Playback()) 
        {
           test.GetFoo();
        }
    }

    public interface ISomeInterface
    {
        string GetFoo();
        void Bar();
    }

此测试将失败,因为期望应调用 Bar 。是因为我创建了StrictMock而不是Dynamic?

1 个答案:

答案 0 :(得分:5)

此测试将失败,因为没有期望调用Bar(),但 被调用。

回答你的问题,是的,这是因为你有一个严格的模拟。如果您更改为DynamicMock,它将忽略除实际设置的期望之外的所有内容。我强烈建议尽可能使用DynamicMocks,因为StrictMocks实际上非常脆弱,并且最终会有很多麻烦。

对于Record / Replay,如果您使用的是具体的MockRepository,它不会自动处于Record模式。只是StrictMock的本质是寻找任何被称为超出预期的东西,无论何时。