c - c 中的包装函数

标签 c unit-testing linker cunit cmocka

我的任务是为现有项目(用 C 语言编写)编写单元测试(使用 cunit 和 cmocka),并遇到了以下问题。当我包装测试文件中定义的函数时,只调用原始函数。另外,不能更改测试文件的来源。 我读到的所有内容都不满足第二个条件,但另一方面很难相信单元测试框架没有为此类问题做好准备。

那么是否可以将函数调用包装到一个文件中定义和调用的函数?

我试图通过向 cmake 文件添加适当的链接器标志来包装它。

最佳答案

is it possible to wrap function call to function that is defined and called in one file?

如您所知,

cmocka 利用链接器的 --wrap 选项。 documentation of --wrap=symbol告诉我们答案 你的问题是否定的:

--wrap=symbol

Use a wrapper function for symbol. Any undefined reference to symbol will be resolved to __wrap_symbol. Any undefined reference to __real_symbol will be resolved to symbol.

任何对 symbol 的引用都在一个目标文件中,该文件还包含 symbol 的定义不是 undefined reference ,因此链接器不会 解析对 __wrap_symbol 的引用。该定义必须编译成 链接中的一些其他目标文件,用于包装要发生的引​​用。

关于c - c 中的包装函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48664718/

相关文章:

c - GIF LZW 压缩流中的编码错误

c - 尝试运行一个排序 C 程序,该程序通过命令行(Mac 终端)接收输入

c++ - 尝试编译使用共享库的 C++ 程序时出错

c - '->' 的类型参数无效

c - 这个 makefile 示例正确吗?

unit-testing - 开玩笑测试 Apollo 提供程序获取错误 : TypeError: this. client.watchQuery 不是函数

angular - 如何在单元测试中将事件对象传递给triggerEventHandler?

unit-testing - 100% 的代码覆盖率并没有涵盖我所有的真实案例

build - CMake 将来自不同 CMakeLists.txt 的对象附加到一个库中

c - 无内存重复的可内联常量 C 数组