静态库(.lib)visual studio的代码覆盖率

时间:2016-06-20 19:57:33

标签: c++ visual-studio static-libraries vs-unit-testing-framework

我有一个静态库(.lib)。我的测试项目中的测试用例在visual studio中,TC参考了很多静态库函数。测试用例有效,一切顺利。但是我无法获得.lib中代码的代码覆盖率,因为我无法添加一个工具.lib。有没有办法为.lib获取代码覆盖率?

2 个答案:

答案 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。这已经是一个检测对象。但是此已检测的对象在链接时再次添加。因此,直到并且除非您的代码在编译时存在,否则无法从中生成概要数据。

我不确定动态链接库。但以上是我从实验中得出的观察结果。