【问题标题】:Rhino Mocks: AAA test syntax without static MockRepository methods?Rhino Mocks:没有静态 MockRepository 方法的 AAA 测试语法?
【发布时间】:2008-12-22 21:19:29
【问题描述】:

我一直在使用(并且喜欢)新的 Rhino Mocks AAA 语法。然而,令我困惑的一件事是我必须像这样创建我的存根和模拟:

var v1 = MockRepository.GenerateStub<MyClass>();

而不是使用实例化的 MockRepository:

var mr = new MockRepository();
var v1 = mr.GenerateStub<MyClass>();

这种语法将使我的单元测试转换更容易。

从阅读 Ayende 的 wiki 看来,第二种语法应该可以工作,但我就是无法让它正常工作。如果我这样做,那么我必须使用 Record/Playback 块。在没有静态方法的情况下,我也无法在网上找到任何人使用新语法的示例。

所以我的问题是,是否有其他人设法在不使用静态方法且无需求助于记录/播放的情况下使 AAA 语法正常工作?如果是这样,我错过了什么?

【问题讨论】:

    标签: .net mocking rhino-mocks


    【解决方案1】:

    我用反射器检查了犀牛模型。

    MockRepository.GenerateStub 实际上会创建一个存储库并调用非静态存根。这是静态方法的实际作用(从反射器复制)

    public static object GenerateStub(Type type, params object[] argumentsForConstructor)
    {
        MockRepository repository = new MockRepository();
        object obj2 = repository.Stub(type, argumentsForConstructor);
        repository.Replay(obj2);
        return obj2;
    }
    

    您的代码中似乎缺少对 Repository.Replay 的调用。

    【讨论】:

    • 为什么我在使用静态方法时不用调用 Replay?我真的不知道对一个而不是另一个有必要
    • 两者都需要。但是静态方法会为您调用 Replay。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多