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

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

var v1 = MockRepository.GenerateStub<myclass>();
</myclass>

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

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

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

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

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

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

licensed under cc by-sa 3.0 with attribution.