我正在实施一些C程序的测试,需要涉及IT技术。为此,我使用GCC的
然而,在这样做时,gcov在编写其
有没有一种方法可以模拟
-Wl,--wrap=open
来模拟stdlib的open()
函数,并检查是否使用了正确的选项。然而,在这样做时,gcov在编写其
.gcda
文件时遇到了一些问题。我猜测我定义的模拟函数不仅被我的测试使用,还被gcov使用。以下是如何重现此问题的简单示例:#include <stdio.h>
int __wrap_open(const char *path, int flags, int mode)
{
printf("hello from __wrap_open\n");
return -1;
}
int main(void)
{
return 0;
}
请使用gcc main.c -Wl,--wrap=open -fprofile-arcs -ftest-coverage -lgcov
进行编译。为了简化示例,我删除了使用CMocka进行单元测试的部分,以显示我遇到的错误。
在使用GCC和gcov 6.3.0运行可执行文件a.out
时,会得到以下输出:
$ ./a.out
hello from __wrap_open
hello from __wrap_open
profiling:/home/romain/wrap-bug/main.gcda:Cannot open
有没有一种方法可以模拟
open()
函数来进行单元测试,并能够使用gcov生成代码覆盖率数据?也许有一种方法可以告诉gcov使用__real_open()
?
__wrap_close
中并没有实际关闭任何内容。我的覆盖率报告在不调用__real_close
的情况下工作正常,我猜操作系统会在退出时自动关闭文件描述符? - MicroJoe