RhinoMocks - защищенные виртуальные члены

Насколько я знаю, RM должен имитировать все, к чему может получить доступ производный класс. Поскольку защищенный виртуальный член доступен из подкласса, не следует ли над ним издеваться?

Насколько я понимаю, RM не поддерживает имитацию защищенных виртуальных участников.


person Dave Smith    schedule 16.06.2010    source источник


Ответы (2)


Если я хочу издеваться над защищенным членом, я обычно пропускаю Rhino Mocks и просто подклассифицирую его с помощью своей собственной фальшивой реализации.

person Chris Missal    schedule 17.06.2010
comment
вздох, это то, что я должен был сделать, чтобы имитировать защищенный виртуальный метод Microsoft WebApi Ok (). ›.‹ - person Alex Nolasco; 03.07.2014
comment
@Alex Вид поражения цели создания фреймворка для фиксации, если вам все еще нужно создавать подделки вручную. - person Ash; 30.08.2017

Насколько я знаю, RM должен имитировать все, к чему может получить доступ производный класс.

Нет. Идея состоит в том, чтобы вы могли имитировать поведение зависимостей тестируемого класса. Слово зависимости используется здесь в том же смысле, что и в инъекции зависимостей.

При разработке через тестирование обычно используется предпочитает композицию наследованию. Зависимости обычно скрыты за интерфейсами.

Насколько я понимаю, RM не поддерживает имитацию защищенных виртуальных участников.

Это правильно. Существует два кратких и типобезопасных способа указать, о каком члене класса вы говорите при настройке поведения: путем вызова члена в режиме записи или с помощью лямбда-выражения. Rhino Mocks поддерживает и то, и другое, но ни один из них не работает для защищенных участников.

person Wim Coenen    schedule 17.06.2010
comment
Позвольте мне перефразировать мое первое утверждение, чтобы сказать, что внутри RM создает фиктивный класс, который подклассифицирует тестируемый класс (или интерфейс). Если это правда, то мой вопрос был в том, что, поскольку к защищенным членам можно получить доступ через подкласс, почему RM не может имитировать этот член. - person Dave Smith; 17.06.2010
comment
@Dave: потому что нет краткого и безопасного для типов способа ссылаться на такие члены в вашем модульном тесте. Компилятор не разрешает вызов защищенного члена в режиме записи. Компилятор не разрешает использование защищенного члена в лямбда-выражении. Строки небезопасны по типу. Следовательно, нет хорошего способа настроить поведение для таких методов. - person Wim Coenen; 17.06.2010