静态库(.lib)的代码覆盖率,Visual Studio

5

我有一个静态库(.lib)。我的测试用例在Visual Studio中,测试用例引用了许多静态库函数。测试用例运行良好,一切顺利。但是我无法获取.lib内部代码的代码覆盖率,因为我无法添加一个instrument .lib。有没有办法也获取.lib的代码覆盖率呢?

2个回答

0

如果您有静态库的源代码,您可以使用当前的测试项目来测试库中的函数。只需将您的测试项目与在Visual Studio中生成库的项目结合即可。

如果您没有源代码,则可以设计测试用例来执行此库的黑盒测试。


我有.lib和测试项目的源代码,两者都在同一个解决方案下。测试用例也正常工作。但问题在于获取.lib的代码覆盖率。无法将.lib添加到测试项目的instrument img中。 - VikasPushkar

-1

我在工作中进行了许多实验,以下是我的观察结果。 代码插装是在编译时进行的。 也就是说,在编译代码时,它也被插装了。因此,对于基于gcc的插装,这里涉及到--ftest-coverage--fprofile-arcs标志。 静态库在编译完成后链接,因此它不会被插装。由于它没有被插装,因此也不会生成来自它的数据。

因此,下一个逻辑步骤是我还插装了库代码,编译了它,然后从那个插装的代码生成了静态库。 现在,我理解的是,静态库是使用一个名为ar的应用程序工具制作的,在我的IDE中,它自动接受.o文件。以前,这是一个非插装的对象文件。现在,在插装之后,期望的是静态库中的每个文件都会刷新其相应的数据。但是这并没有发生。 这意味着两件事情之一: 1- .gcno文件也需要添加进去 2- 只有编译的文件才能生成配置文件数据。

接下来我所做的下一步是修改这个静态库构建步骤,并进行了以下更改。我的原始代码是ar rcs libmylib.a mylib.o,我将其更改为ar rcs libmylib.a mylib.gcno。基本上将gcno文件包含到静态库中,但显然没有起作用。但还是试了一下。

接下来我添加了.o和`.gcno'两者都包含在静态库中。令人惊讶的是应用程序运行时没有出现错误,但没有生成任何配置文件数据。这让我相信,配置文件数据仅针对在应用程序中编译的文件生成,而不是链接的文件。

我最后尝试的是,不再将其作为静态库存档文件进行链接,而是直接将对象文件附加到应用程序中。mylib.o。这已经是一个有仪器的对象。但是这个已经有仪器的对象在链接时又被添加了一次。因此,除非您的代码存在于编译时,否则理论上无法从中生成配置文件数据。

我不确定动态链接库。但以上是我进行实验的观察结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接