Rhino Mocks:没有静态MockRepository方法的AAA测试语法?

时间:2008-12-22 21:19:29

标签: .net mocking rhino-mocks

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

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

而不是实例化的MockRepository:

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

这种语法可以简化我的单元测试过渡。

从阅读Ayende的wiki看来,第二种语法应该可行,但我无法让它正常运行。如果我这样做,那么我必须使用录制/播放块。在没有静态方法的情况下,我也无法在网上找到任何使用新语法的人。

所以我的问题是,是否有其他人设法在不使用静态方法的情况下使AAA语法工作而不必诉诸于录制/播放?如果是这样,我错过了什么?

1 个答案:

答案 0 :(得分:4)

我用反射器检查了犀牛嘲笑。

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的调用。