Насмешка над неустановимым дочерним свойством с помощью Rhino Mocks - PullRequest
2 голосов
/ 22 апреля 2010

В настоящее время у меня есть интерфейсы, подобные следующим:

interface IService
{
   void Start();
   IHandler ServiceHandler { get; }
}

interface IHandler
{
   event EventHandler OnMessageReceived;
}

Используя Rhino Mocks, достаточно легко издеваться над IService, но он не назначает экземпляр IHandler свойству ServiceHandler Поэтому, когда мой тестируемый метод добавляет обработчик событий к _mockedService.ServiceHandler.OnMessageReceived, я получаю ошибку «Ссылка на объект не установлена».

Как я могу убедиться, что ServiceHandler назначено значение в макете IService экземпляра?

Это скорее всего Rhino Mocks 101, но я просто набираюсь скорости ...

1 Ответ

4 голосов
/ 22 апреля 2010
IService service = MockRepository.GenerateStub<IService>();
IHandler stubHandler = MockRepository.GenerateStub<IHandler>();
service.Stub(s => s.ServiceHandler).Return(stubHandler);

//assertions

Или вместо этого вы можете использовать GenerateMock, если вам нужно записать ожидания на ваших подделках.

РЕДАКТИРОВАТЬ: для более старых версий RhinoMocks вы можете сделать это:

MockRepository mocks = new MockRepository();
IService service = mocks.CreateStub<IService>();
IHandler handler = mocks.CreateStub<IHandler>();

using (mocks.Record())
{
    SetupResult.For(service.ServiceHandler).Return(handler);
    //setup expectations using Expect.Call
}

using (mocks.Playback())
{
    //assertions
}
...