Как я могу использовать макеты Rhino для макетирования только одного значения в тестовом объекте? - PullRequest
1 голос
/ 24 января 2011

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

            ChannelLoad loader = new ChannelLoad(_customerDbMock, _bulkCopyMock);
            loader.Execute(taskId);

Объект «загрузчик» теперь пытается соединиться с другим объектом, чтобы получить строковое значение, тогда как раньше строка возвращалась автоматически.Таким образом, очевидное решение состоит в том, чтобы смоделировать этот объект для возврата подходящего значения для теста.Однако по разным причинам я не могу легко это сделать.

В идеале, я хотел бы иметь возможность получить "настоящий" (то есть, как указано в коде) объект загрузчика, который выполняет "настоящий"Msgstr "Выполнить метод, но который имеет значение" макет "для этой конкретной строки.Но я действительно не уверен, как это сделать - даже если это возможно - с Rhino Mocks.Рассматриваемое строковое свойство не является абстрактным или чем-то еще - оно защищено и фактически доступно только для чтения.Вот как это выглядит внутри «загрузчика»:

    protected string DbConnectionString
    {
        get
        {
            return _Service.GetLocalDatabase().GetConnectionString(_Service);
        }
    }

И проблема в том, что для тестовой среды «GetLocalDatabase» ничего не возвращает.

Кто-нибудь мне здесь поможет?Есть ли способ, которым я могу смоделировать это, используя Rhino Mocks, или это мой единственный способ реорганизовать код, чтобы он не полагался на внешний объект?Если последнее, указатели также будут полезны.

Приветствия, Мэтт

Ответы [ 2 ]

3 голосов
/ 24 января 2011

Два других варианта, если вы не хотите внедрять _Service:

Создайте класс, который наследуется от ChannelLoad (назовите его «TestableChannelLoader» или что-то в этом роде) и

  1. перезаписать свойство DbConnectionString или

  2. извлечь метод "GetConnectionString", который можно переопределить в новом классе, и вызвать его в свойстве DbConnectionString

2 голосов
/ 24 января 2011

Я вижу, что загрузчик имеет зависимость от _Service.Итак, вам нужно внедрить макет этой зависимости в загрузчик, чтобы изменить поведение свойства DbConnectionString.

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