Rostest与lcov
在ROS中集成了gtest的功能,在一个叫rostest的功能包下面,要使用rostest的功能,需要现在CMakeList.txt与package.xml中做配置
- CMakeLists.txt中的主要设置
首先包含rostest库
#设置Test开启关闭状态 开启:ON,关闭:OFF
set(CATKIN_ENABLE_TESTING ON)
message("CATKIN_ENABLE_TESTING is: " ${CATKIN_ENABLE_TESTING})
#并包含rostest功能包
find_package(rostest REQUIRED)
然后通过catkin_add_gtest,添加测试目标文件
if(CATKIN_ENABLE_TESTING)
catkin_add_gtest(demotest src/demo_test.cpp)
target_link_libraries(demotest 编译所需要的库)
endif()
- package中主要设置
编译依赖中加入rostest即可
<build_depend> rostest </build_depend>
测试文件中引入gtest头文件,剩余的和写gtest单元测试一样
#include <gtest/gtest.h>
#include "测试文件.h"
TEST(Testcase,testname){
do test;
}
int main(int argc,char** argv){
testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
运行所有测试:
catkin_make run_tests
运行单个测试
catkin_make run_tests<TAB><TAB>
双击tab后会出现添加了的test文件,以run_tests+节点名称+gtest+设置的测试文件名称结尾,比如
catkin_make run_tests run_tests_demo_node_gtest_demotest
代码覆盖率测试-lcov
gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具, 可以生成代码覆盖信息, 已安装gcc的环境直
接支持gcov的使用
lcov是gcov工具的图形前端,收集多个源文件的gcov数据,生成描述覆盖率的HTML页面。生成的结果
中会包含概述页面,方面浏览,lcov需要单独安装。
# 获取
wget https://github.com/linux-test-project/lcov/releases/download/v1.14/lcov- 1.14.tar.gz
tar -zxvf lcov-1.14.tar.gz
# 编译
make
# 安装
make install
然后在需要统计代码覆盖率的工程下添加设置
# 编译时启用覆盖率统计
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
统计流程是
-
编译添加了启用覆盖率统计的工程
-
清空上次的覆盖率统计数据
-
运行测试文件
-
收集覆盖率文件生成统计数据
-
利用覆盖率统计数据*.info生成html文件
# 清空上次的统计数据
#lcov --directory appdir --zerocounters
lcov --directory ./build/CMakeFiles/demotest.dir/src --zerocounters
# 执行编译后的测试文件
./demotest
# 收集测试文件运行后产生的覆盖率文件
# lcov --directory appdir --capture --output-file app.info
lcov --directory ./build/CMakeFiles/demotest.dir/src --capture --output-file ./build/CMakeFiles/demotest.dir/src/app.info
# 通过*.info生成html文件
# genhtml app.info
genhtml ./build/CMakeFiles/demotest.dir/src/app.info --output-directory ./coverage
然后使用浏览器打开./coverage/index.html可以看到覆盖率统计信息
主要注意一点的是,被注释的代码不会被统计计算在内。