Пересмешивать не виртуальные методы в C ++ без редактирования рабочего кода?

Я - довольно новый разработчик программного обеспечения, в настоящее время работающий над добавлением модульных тестов в существующий проект C ++, который начался несколько лет назад. По нетехнической причине я не могу изменять любой существующий код. Базовый класс всех моих модулей имеет множество методов для установки / получения данных и связи с другими модулями.

Поскольку я просто хочу провести модульное тестирование каждого отдельного модуля, я хочу иметь возможность использовать стандартные значения для всех моих методов межмодульного взаимодействия. То есть для метода Ping (), который проверяет, активен ли другой модуль, я хочу, чтобы он возвращал значение true или false в зависимости от того, какой тип теста я выполняю. Я изучал Google Test и Google Mock, и он поддерживает насмешливые не виртуальные методы. Однако подход описан (http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods) требует, чтобы я «шаблонизировал» оригинальные методы, чтобы воспринимать как реальные, так и фиктивные объекты. Я не могу пойти и шаблонизировать свои методы в базовом классе из-за требования, упомянутого ранее, поэтому мне нужен какой-то другой способ насмешки над этими виртуальными методами

По сути, методы, которые я хочу смоделировать, находятся в каком-то базовом классе, а модули, для которых я хочу провести модульное тестирование и создавать макеты, являются производными классами этого базового класса. Между моим базовым классом Module и модулями, которые я хочу протестировать, есть промежуточные модули.

Буду признателен за любые советы!

Спасибо,

JW

РЕДАКТИРОВАТЬ: более конкретные примеры

Мой базовый класс, скажем, rootModule, модуль, который я хочу протестировать, это leafModule. Существует промежуточный модуль, который наследуется от rootModule, leafModule наследует от этого промежуточного модуля.

В моем leafModule я хочу протестировать метод doStuff (), который вызывает не виртуальный GetStatus (moduleName), определенный в классе rootModule. Мне нужно как-то сделать GetStatus (), чтобы вернуть выбранное постоянное значение. Для меня издевательство является новым, так что использование фиктивных объектов - даже правильный подход?

Ответы на вопрос(3)

Ваш ответ на вопрос