Функция обертывания в c

У меня возникла задача написать модульные тесты (используя cunit и cmocka) для существующего проекта (написанного на C) и выполнив следующую задачу. Когда я обертываю функцию, определенную в тестируемом файле, вызывается только оригинальная функция. Дополнительно, a не может изменить источник тестируемого файла. Все, что я читал, не соответствовало второму условию, но, с другой стороны, довольно сложно поверить, что модульная тестовая среда не подготовлена ​​к этой проблеме.

Так можно ли обернуть вызов функции функции, которая определена и вызывается в одном файле?

Я попытался обернуть его, добавив соответствующий флаг компоновщика в файл cmake.

можно ли обернуть вызов функции функции, которая определена и вызывается в одном файле?

cmocka использует опцию --wrap компоновщика, как вы знаете. Документация --wrap=symbol говорит нам, что ответ на ваш вопрос: No:

–wrap = символ

Используйте функцию обертки для символа. Любая неопределенная ссылка на символ будет разрешена __wrap_symbol. Любая неопределенная ссылка на __real_symbol будет разрешена к символу.

Любая ссылка на symbol который находится в объектном файле, который также содержит определение symbol , не является неопределенной ссылкой, поэтому компоновщик не будет разрешать эту ссылку на __wrap_symbol . Определение должно быть скомпилировано в какой-либо другой объектный файл в ссылке для обертывания ссылки.