Rhino Mocks Record Playback语法

3 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();
    }
Run Code Online (Sandbox Code Playgroud)

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

wom*_*omp 5

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

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

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