犀牛模拟记录和回放语法

4

求助,有人能解释一下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而不是DynamicMock吗?

1个回答

5

这个测试失败了,因为没有期望 Bar() 被调用,但实际上它被调用了。

回答你的问题,是的,这是因为你使用了严格模拟。如果你改用动态模拟,它将忽略除你设置的期望之外的一切。我强烈建议尽可能使用动态模拟,因为严格模拟实际上相当脆弱,往往会带来很多麻烦。

至于录制/回放,如果你正在使用具体的 MockRepository,它不会自动进入录制模式。这只是严格模拟的本质,它会查找任何在期望之外被调用的东西,无论何时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接