gtest and lcov
要想保持测试的完整性,需要将gtest与lcov配合使用,方能更好地测试源码的质量。
一、下载lcov源码
源码下载链接:https://sourceforge.net/projects/ltp/files/Coverage%20Analysis/LCOV-1.13/
二、解压源码
进入到解压文件夹,执行命令“make install”安装lcov
三、编译中增加编译参数:-fprofile-arcs -ftest-coverage
(注意:这里是两个参数,分别是:-fprofile-arcs 和 -ftest-coverage)
编译后, 会为每个源文件生成.gcno结尾的文件。
四、编译后运行可执行程序./run_test
运行后,会为每个源文件,生成gcda结尾的文件。
五、使用lcov收集统计数据做成图形化显示的的数据,可用于分析测试覆盖率
lcov -c -o test.info -d .
-
-c :捕捉覆盖率数据
-
-d :表示的是目录,也就是gcno和gcda目录。使用lcov统计覆盖率,必须将gcno和gcda放在同一个目录,并且有源代码,且源代码的目录和编译时的目录一样,否则不能生成。
-
-o :表示输出文件,以.info结尾,用来存储数据
六、lcov文件过滤
某些情况下,需要屏蔽第三方库的覆盖率计算或者只统计某个文件夹下的覆盖率计算,就需要用到lcov的文件过滤功能。
- 移除制定目录
需要用到--remove参数,以删除include目录下所有文件信息为例 :
lcov --remove all.info '*/include/*' '' -o result.info
all.info 总的覆盖率信息 result.info 筛选后的覆盖率信息
- 筛选固定目录
需要用到--extract参数,以指定samples目录为例:
lcov --extract all.info '*/samples/*' -o result.info
all.info 总的覆盖率信息 result.info 筛选后的覆盖率信息
七、获取html文件可视化输出
genhtml test.info -o output/
output是一个目录,index.html为导航文件,使用 web 浏览器打开 index.html 文件查看代码覆盖结果。可看到各个文件夹下源码文件的测试覆盖率,以下是筛选了排除“*/include/*”目录下文件的测试覆盖率信息:
点击进去,可看到各个文件被测试的覆盖率情况,点击到文件中,每个文件中哪一行测试到,哪一行没有测试到。