Creo que no es posible hacerlo con C++ estándar en este momento (pero esperemos que pronto llegue a C++ una poderosa reflexión en tiempo de compilación ...). Sin embargo, hay varias opciones para hacerlo.
Puedes echar un vistazo a Injector++. Solo es Windows en este momento, pero planea agregar soporte para Linux & Mac.
Otra opción es CppFreeMock, que parece funcionar con GCC, pero no tiene actividades recientes.
HippoMocks también ofrecen dicha capacidad, pero solo para funciones gratuitas. No es compatible con las funciones de los miembros de la clase.
No estoy del todo seguro, pero parece que todo lo anterior logra esto sobrescribiendo la función objetivo en el tiempo de ejecución para que salte a la función simulada.
Existe C-Mock, que es una extensión de Google Mock que le permite simular funciones no virtuales redefiniéndolas y confiando en que las funciones originales se encuentran en bibliotecas dinámicas. Está limitado a la plataforma GNU/Linux.
Finalmente, también puedes probar PowerFake (para el cual, soy el autor) como se introdujo here.
No es un marco de burla (actualmente) y ofrece la posibilidad de reemplazar las funciones de producción con las de prueba. Espero ser capaz de integrarlo a uno o más marcos de burla; si no, se convertirá en uno.
También anula la función original durante la vinculación (por lo tanto, no funcionará si se llama a una función en la misma unidad de traducción en la que está definida), pero utiliza un truco diferente que C-Mock ya que usa GNU ld es --wrap
opción. También necesita algunos cambios en su sistema de compilación para las pruebas, pero no afecta el código principal de ninguna manera (excepto si se ve obligado a poner una función en un archivo .cpp separado); pero se proporciona soporte para integrarlo fácilmente en los proyectos de CMake.
Pero, actualmente está limitado a GCC/GNU ld (funciona también con MinGW).
Existen algunas técnicas que manejan métodos no virutales. Consulta https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#mocking-nonvirtual-methods –