Я использую (и мне нравится) новый синтаксис Rhino Mocks AAA. Однако меня озадачивает то, что я должен создавать свои заглушки и макеты следующим образом:
var v1 = MockRepository.GenerateStub<MyClass>();
вместо созданного экземпляра MockRepository:
var mr = new MockRepository();
var v1 = mr.GenerateStub<MyClass>();
Этот синтаксис упростил бы переход моих модульных тестов.
Из чтения вики Айенде кажется, что второй синтаксис должен работать, но я просто не могу заставить его работать правильно. Если я сделаю это таким образом, мне придется использовать блоки записи / воспроизведения. Я также не могу найти в Интернете примеров, когда кто-либо использовал бы новый синтаксис без статических методов.
Итак, мой вопрос: кому-нибудь еще удалось заставить синтаксис AAA работать без использования статических методов и без необходимости прибегать к записи / воспроизведению? Если да, то что мне не хватает?





Я проверил моки носорога с помощью рефлектора.
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 при использовании статических методов? Я не очень понимаю, как это нужно одному, а другому нет