Пересмешивать не виртуальные методы в 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 (), чтобы вернуть выбранное постоянное значение. Для меня издевательство является новым, так что использование фиктивных объектов - даже правильный подход?