4

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

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

而不是实例化的 MockRepository:

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

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

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

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

4

1 回答 1

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

于 2008-12-23T13:11:05.697 回答