使用lcov执行.cpp文件的unitests时排除头文件的覆盖范围

时间:2017-12-31 06:46:48

标签: c++ code-coverage googletest lcov

我为unittest生成了html代码覆盖率。问题是它为包含预处理器中定义的所有内容生成代码覆盖率。

unittest的codecoverage位于代码覆盖率报告的 unitTest 链接中。我只需要 unitTest

我还删除了其他所有内容,并在生成代码覆盖率之前保留测试文件的gcda和gcno文件,但它仍然无济于事。执行此操作的代码是:

find obj/ ! -name '*_unittests*' -type f -delete

代码覆盖率报告如下所示: Coverage Report

我尝试在include预处理器的开头和结尾添加LCOV_EXCL_START和LCOV_EXCL_STOP,如下所示,但它仍然无济于事。

LCOV_EXCL_START
#include <inttypes.h> 
#include "../src/generators/buffersss.h" 
#include "gtest/gtest.h"
#include <getopt.h>  
LCOV_EXCL_STOP
Test code goes here.....

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

以下代码解决了问题

lcov --remove coverage.info '/usr/include/*' 'src/*' -o filtered_coverage.info

答案 1 :(得分:0)

对于 CMake 用户,我强烈建议使用:

https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake

例如宏 setup_target_for_coverage_lcov 及其 EXCLUDE 参数。