# gtest

Google 开源的 c++ 单元测试框架
https://google.github.io/googletest/

# 查看代码覆盖率

  • GCC + gcov (cmake 一般带了) + lcov
  1. 修改 CMakeLists.txt
lcov
1
2
3
4
5
6
7
8
9
10
11
12
13
# 启用调试信息和覆盖率支持(仅在需要时开启)
option(ENABLE_COVERAGE "Enable coverage build" OFF)

if(ENABLE_COVERAGE)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(your_library_or_source_files PRIVATE
-O0 # 禁用优化(否则行号可能不准)
-g # 调试信息
--coverage # 等价于 -fprofile-arcs -ftest-coverage
)
target_link_options(your_library_or_source_files PRIVATE --coverage)
endif()
endif()
  1. 构建并运行测试

    cmake … -DENABLE_COVERAGE=ON
  2. 生成可视化覆盖率报告(HTML)
lcov
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 初始化覆盖率数据
lcov --capture --initial --directory . --output-file coverage_base.info

# 收集实际运行后的覆盖率
lcov --capture --directory . --output-file coverage_test.info

# 合并(可选,但推荐)
lcov --add-tracefile coverage_base.info --add-tracefile coverage_test.info --output-file coverage_total.info

# (可选)过滤掉第三方代码(如 googletest)
lcov --remove coverage_total.info '/usr/*' '*/thirdpart/*' '*/googletest*' --output-file coverage_final.info

# 生成 HTML 报告
genhtml coverage_final.info --output-directory coverage_report

或者直接

lcov
1
make coverage

然后再 build 目录下的 coverage_html 目录下查看 index.html,可以点开具体文件查看哪些行没有覆盖到

# 如何提高单元测试的覆盖率

分析当前覆盖率报告,找出未执行的代码路径,然后编写新的测试用例来触发这些路径。

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

NoResponse WeChat Pay

WeChat Pay

NoResponse Alipay

Alipay

NoResponse PayPal

PayPal