Mocking InvokeOperation для модульного тестирования с использованием Rhino Mocks - PullRequest
1 голос
/ 12 марта 2011

У меня есть интерфейс службы данных с методом:

   void GetDataByLocationId(Guid locationId, Action<InvokeOperation<IEnumerable<DataValue>>> callback);

Я хочу протестировать класс, который зависит от этого интерфейса службы данных, и хотел бы смоделировать вышеуказанный метод.

Я настроил свои макеты как:

_mocks = new MockRepository();

    var dataLoadOperation = _mocks.StrictMock<InvokeOperation<IEnumerable<DataValue>>>();
    Action<InvokeOperation<IEnumerable<DataValue>>> dataValueCallback = null;

Затем в моем тестовом выполнении:

    var locationId = Guid.NewGuid();
    var values = // something //
    using (_mocks.Unordered())
    {
            Expect.Call(() => _dataService.GetDataByLocationId(Arg<Guid>.Is.Equal(locationId), Arg<Action<InvokeOperation<IEnumerable<DataValue>>>>.Is.Anything));
            LastCall.Callback(new Func<Action<InvokeOperation<IEnumerable<DataValue>>>, bool>(c => { dataValueCallback = c; return true; }));
            dataLoadOperation .Stub(x => x.HasError).Return(false);
            dataLoadOperation .Stub(x => x.Value).Return(values);
    }

Но это никогда не делает эток выполнению ... Оказывается, что:

System.ServiceModel.DomainServices.Client.InvokeOperation

является запечатанным class, и Rhino Mocks выдает исключение при запуске

Не могу создать макеты запечатанных классов

Я ищу предложения по улучшению моего дизайна для поддержкиэтот контрольный пример;и до сих пор использует насмешки.

1 Ответ

1 голос
/ 12 марта 2011

Я бы создал интерфейс, который представляет ваше взаимодействие с классом InvokeOperation. Создайте реализацию «по умолчанию», которая просто делегирует реальный класс InvokeOperation. Затем вы можете заглушить интерфейс во время насмешки.

Интерфейс не должен быть полной копией элементов и свойств InvokeOperation - только тех, которые вы используете в своем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...