Zombando de métodos não virtuais em C ++ sem editar o código de produção?

Sou um desenvolvedor de software relativamente novo que atualmente trabalha adicionando testes de unidade a um projeto C ++ existente que começou anos atrás. Devido a um motivo não técnico, não tenho permissão para modificar nenhum código existente. A classe base de todos os meus módulos possui vários métodos para definir / obter dados e se comunicar com outros módulos.

Como eu só quero testar a unidade de cada módulo individualmente, desejo poder usar valores fixos para todos os meus métodos de comunicação entre módulos. I.e. para um método Ping () que verifica se outro módulo está ativo, quero que ele retorne verdadeiro ou falso com base no tipo de teste que estou fazendo. Eu estive pesquisando no Google Test e no Google Mock, e ele suporta a simulação de métodos não virtuais. No entanto, a abordagem descrita (http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods) exige que eu "modele" os métodos originais para receber objetos reais ou simulados. Não posso modelar meus métodos na classe base devido ao requisito mencionado anteriormente, portanto, preciso de outra maneira de zombar desses métodos virtuais

Basicamente, os métodos que eu quero zombar estão em alguma classe base, os módulos que eu quero testar e criar simulações são classes derivadas dessa classe base. Existem módulos intermediários entre a minha classe Module e os módulos que eu quero testar.

Eu apreciaria qualquer conselho!

Obrigado,

JW

EDIT: Um exemplo mais concreto

Minha classe base é digamos rootModule, o módulo que quero testar é leafModule. Há um módulo intermediário que herda de rootModule, leafModule herda deste módulo intermediário.

No meu leafModule, quero testar o método doStuff (), que chama o GetStatus não virtual (moduleName) definido na classe rootModule. Eu preciso de alguma forma fazer GetStatus () para retornar um valor fixo escolhido. Zombar é novo para mim, então usar objetos simulados é a abordagem correta?

questionAnswers(3)

yourAnswerToTheQuestion