我的任务是为现有项目(用 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/