Я думаю, что сейчас невозможно сделать это со стандартным C ++ (но давайте надеяться, что мощное отражение времени компиляции скоро придет в C ++ ...). Однако для этого есть несколько вариантов.
Возможно, вы посмотрите на Injector ++ . Сейчас это только Windows, но планируется добавить поддержку Linux и Mac.
Другой вариант - CppFreeMock , который, похоже, работает с GCC, но в последнее время не работает.
HippoMocks также предоставляют такую возможность, но только для бесплатных функций. Он не поддерживает его для функций-членов класса.
Я не совсем уверен, но, похоже, все вышеперечисленное достигает этого путем перезаписи целевой функции во время выполнения, чтобы она перешла к фиктивной функции.
Имеется C-Mock , который является расширением для Google Mock, позволяющим имитировать не виртуальные функции путем их переопределения, а также с учетом того факта, что оригинальные функции находятся в динамических библиотеках. Он ограничен платформой GNU / Linux.
Наконец, вы также можете попробовать PowerFake (для которого я являюсь автором), как представлено здесь .
Это не фиктивная среда (в настоящее время), и она предоставляет возможность замены производственных функций на тестовые. Я надеюсь, что смогу интегрировать его в одну или несколько насмешливых структур; если нет, он станет одним.
Она также переопределяет исходную функцию во время компоновки (поэтому она не будет работать, если функция вызывается в той же единице перевода, в которой она определена), но использует другой трюк, чем C-Mock, так как использует GNU ld's --wrap
вариант. Он также требует некоторых изменений в вашей системе сборки для тестов, но никак не влияет на основной код (кроме случаев, когда вы вынуждены поместить функцию в отдельный файл .cpp); но поддерживается его простая интеграция в проекты CMake.
Но в настоящее время он ограничен GCC / GNU ld (работает также с MinGW).