C++ 测试覆盖率统计轻量方案-gtest+lcov
C++覆盖率测试的解决方案大多数都是收费的,集成方案通常比较笨重。本文介绍一种简单实用的轻量级解决办法:使用gtest和lcov快速实现C++代码的测试覆盖率统计。
依赖环境搭建
- gtest环境搭建 : C++单元测试,假定你已经搭建好gtest的开发环境,不详述。
- lcov软件安装:
- 下载lcov:http://ltp.sourceforge.net/coverage/lcov.php,有rpm包和源码包。(以源码包为例)
- 解压lcov-x.xx.tar.gz,进入源码包,执行make install
- 在命令行执行lcov -v,正确输出版本号即安装成功
所需的依赖至此已全部安装完成。
增加编译选项fprofile-arcs –ftest-coverage
要是lcov生效,需要在编译选项中新增–fprofile-arcs –ftest-coverage
,编译完成才能生成覆盖率相关的*.gcda文件。
使用方式:
- 使用gcc编译示例:
gcc –fprofile-arcs –ftest-coverage -o test test.c
;g++和makefile增加同样的选项即可。 - 运行测试用例的目标文件,本例中:
./test
。运行成功在对应的源码目录会生成与gcda对应的gcno文件。 - 使用lcov生成覆盖率统计文件:
lcov -d src_dir -t 'test' -o 'test.info' -b . -c
。命令含义如下:- -d src_dir: 待覆盖率测试的源码目录,此处假设为src_dir
- -t ‘test’: 目标的名称,可不带引号,此处为test
- -o ‘test.info’: 生成的覆盖率文件,可自定义,可不带引号
- -b .:相对目录的起始位置
- -c: capture,采集覆盖率
- 使用genhtml生成覆盖率报表:
genhtml -o result test.info
。- -o result: 输出的目标文件夹,可带路径,此处为当前目录下的result目录
- test.info: 覆盖率的统计文件