我有一个静态库(.lib)。我的测试项目中的测试用例在visual studio中,TC参考了很多静态库函数。测试用例有效,一切顺利。但是我无法获得.lib中代码的代码覆盖率,因为我无法添加一个工具.lib。有没有办法为.lib获取代码覆盖率?
答案 0 :(得分:0)
如果您有静态库的源代码,则可以使用当前的测试项目来测试lib中的函数。只需将测试项目与在visual studio中生成库的项目相结合。 如果您没有源代码,可以设计测试用例来执行此lib的黑盒测试。
答案 1 :(得分:-1)
我为此做了很多实验,下面是观察结果。
代码检测在编译时起作用。
意味着在编译代码时,也会对其进行检测。因此,对于基于gcc的检测,此处显示--ftest-coverage
和--fprofile-arcs
标志。
静态库在编译完成后被链接,因此不会进行检测。由于未进行检测,因此不会生成任何数据。
因此,接下来的逻辑步骤是我也检测了库代码,对其进行了编译,然后从该检测后的代码生成了静态库。
现在,据我所知,静态库是使用名为ar
的应用程序工具制作的,在我看来,它是自动获取.o
文件的。以前这是未检测的目标文件。现在,在预期插入之后,还应该针对静态文件库中的每个文件刷新静态库中的数据。但是那没有发生。
这意味着两件事之一
1-.gcno文件也需要添加其或
2-只有编译的文件才能生成配置文件数据。
现在,我要做的下一步是修改此静态库构建步骤,并进行了以下更改。我的原始行是ar rcs libmylib.a mylib.o
,我将其更改为ar rcs libmylib.a mylib.gcno
。基本上将gcno文件包含到静态库中,这显然没有用。但还是给了机会。
接下来,我确实将.o
和`.gcno'都添加到了静态库中。令人惊讶的是,该应用程序运行时没有错误,但是没有生成配置文件数据。这使我相信配置文件数据仅针对应用程序中编译的文件生成,而不针对链接的文件生成。
我最后一次尝试是将对象文件附加到应用程序中,而不是将其链接为静态库存档。 mylib.o
。这已经是一个检测对象。但是此已检测的对象在链接时再次添加。因此,直到并且除非您的代码在编译时存在,否则无法从中生成概要数据。
我不确定动态链接库。但以上是我从实验中得出的观察结果。