Gtest集成Lcov代码覆盖率测试

做好了单元测试但是别人并不知道我们的单元测试做的如何,是否覆盖了所有的需要被测试的类方法或者变量等,所以我们需要对单测case做一个覆盖率统计。其实本质就是看代码执行时候运行了你需要测试文件里面的所有代码,比如switch分支 if分支等。

配置环境

  • 安装
    下载lcov:http://ltp.sourceforge.net/coverage/lcov.php,有rpm包和源码包。(以源码包为例)
    解压lcov-x.xx.tar.gz,进入源码包,执行make install
    在命令行执行lcov -v,正确输出版本号即安装成功
  • 增加Lcov编译选项
    在项目顶层目录CmakeLists.txt中添加以下编译指令:
# coverage option
OPTION (ENABLE_COVERAGE "Use gcov" ON)
MESSAGE(STATUS ENABLE_COVERAGE=${ENABLE_COVERAGE})
IF(ENABLE_COVERAGE)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
ENDIF()

使用方式

(1)将cmake编译选项设置为-DENABLE_COVERAGE=OFF …,或者将顶层目录CmakeLists.txt中OPTION (ENABLE_COVERAGE “Use gcov” OFF)编译选项手动设置为ON。

(2)编译产生.gcno文件,运行则产生.gcda(与.gcno对应)文件。

(3)使用Lcov生成覆盖率统计文件。

lcov -d cmake-build-debug -t test -o test.info -b . -c  --no-external

命令参数含义如下:
-d src_dir: 待覆盖率测试的源码目录,本工程设置为cmake-build-debug
-t ‘test’: 目标的名称,此处为test
-o ‘test.info’: 生成的覆盖率文件,可自定义,可不带引号
-b .:相对目录的起始位置
-c: capture,采集覆盖率

(4)使用genhtml生成覆盖率报表
genhtml -o report test.info
-o result: 输出的目标文件夹,可带路径,此处为当前目录下的result目录
test.info: 覆盖率的统计文件。
Lcov更多参数含义:https://blog.csdn.net/Fan0920/article/details/101440003

4.4 结果示例

过滤掉Gtest目录下的文件,

lcov --remove test.info  '*/googletest-1.10/*' -o finalresult.info
genhtml -o report  finalresult.info

去除覆盖率xml文件中不需要的文件(include),或者包含需要的(source)

问题:在产生了.gcno 和 .gcda两个文件后,使用lcov -c -d Debug/source/ -o Debug/coverage.info 产生中间文件coverage.info文件,然后用genhtml -o output/ Debug/coverage.info产生html文件,发现产生的index.xml文件包含了include,甚至/usr/*下的公共头文件,怎么去除这些不需要统计覆盖率的文件?

  • 正向提取需要的文件:

//比如希望把source相关的路径提取出来

lcov --extract Debug/coverage.info '*source/*' -o Debug/finalresult.info

//然后产生的xml就包含所有source相关的文件

genhtml -o output/  Debug/finalresult.info
  • 反向去除不需要的文件:

//比如希望去除UnitTest 和/usr/相关文件:

lcov --remove Debug/coverage.info '*UnitTest/*' '/usr/*' -o Debug/finalresult.info

//然后产生的xml就去除了UnitTest 和/usr/相关的文件

genhtml -o output/  Debug/finalresult.info

注意:lcov 不允许同时使用–extract 和 --remove

你可能感兴趣的:(笔记,UT,Lcov)