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