ROS1 配置代码覆盖率
ROS1 的 CMakeLists 模板中自带了集成 gtest 测试框架的注释说明,只需要按注释修改 CMake 脚本就可以搭好测试环境。下面附上测试主函数供参考。
cpp
#include <gtest/gtest.h>
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
然而,想要知道测试的代码覆盖率就较为麻烦。下面给出操作方法。
-
安装
lcov
。bashsudo apt install lcov
-
修改
CMakeLists.txt
,增加覆盖率编译选项和链接选项。cmakeoption(COVERAGE "Enable coverage flags" OFF) if(COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "GNU") message(STATUS "Coverage enabled (GCC + gcov)") add_compile_options(-O0 -g --coverage) add_link_options(--coverage) endif()
-
编写脚本,一键完成测试、覆盖率统计、覆盖率报告生成。
bash#!/usr/bin/env bash lcov --directory build --zerocounters catkin_make -DCMAKE_BUILD_TYPE=Debug -DCOVERAGE=ON run_tests lcov --rc lcov_branch_coverage=1 --directory build --capture --output-file lcov.info lcov --rc lcov_branch_coverage=1\ --remove lcov.info \ '/opt/ros/*' \ '/usr/*' \ '*/devel/*' \ '*/build/*' \ '*/test/*' \ '*/gtest/*' \ --output-file lcov.info genhtml lcov.info --output-directory build/coverage_html --branch-coverage
运行以上脚本后,就可以打开
build/coverage_html/index.html
查看测试报告了。在 VSCode 中安装 Live Preview 扩展,可以直接在 VSCode 中预览 HTML 报告。
-
在 VSCode 中安装 Coverage Gutters 扩展,然后运行
Coverage Gutters: Watch
命令。运行该命令后,就可以在编辑器看到代码覆盖情况了。