C++ 测试覆盖率统计轻量方案-gtest+lcov

时间:2024-03-27 10:11:52

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: 覆盖率的统计文件

使用效果展示:

C++ 测试覆盖率统计轻量方案-gtest+lcov

参考文档: