Rhino Mocks: синтаксис теста AAA без статических методов MockRepository?

Я использую (и мне нравится) новый синтаксис Rhino Mocks AAA. Однако меня озадачивает то, что я должен создавать свои заглушки и макеты следующим образом:

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

вместо созданного экземпляра MockRepository:

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

Этот синтаксис упростил бы переход моих модульных тестов.

Из чтения вики Айенде кажется, что второй синтаксис должен работать, но я просто не могу заставить его работать правильно. Если я сделаю это таким образом, мне придется использовать блоки записи / воспроизведения. Я также не могу найти в Интернете примеров, когда кто-либо использовал бы новый синтаксис без статических методов.

Итак, мой вопрос: кому-нибудь еще удалось заставить синтаксис AAA работать без использования статических методов и без необходимости прибегать к записи / воспроизведению? Если да, то что мне не хватает?


person George Mauer    schedule 22.12.2008    source источник


Ответы (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 в вашем коде.

person Mendelt    schedule 23.12.2008
comment
Почему мне не нужно вызывать Replay при использовании статических методов? Я не очень понимаю, как это нужно одному, а другому нет - person George Mauer; 23.12.2008
comment
Это нужно обоим. Но статические методы вызывают за вас Replay. - person Mendelt; 23.12.2008