利用Gtest和Lcov搭建Unit Test测试环境并生成覆盖率方法
一、相关工具下载1、gtest1.6源代码:https://gitee.com/wenfei6316/gtest2、lcov1.14源代码:https://gitee.com/wenfei6316/lcov3、json2.9源代码:https://gitee.com/wenfei6316/json2.94、测试用例路径:https://gitee.com/wenfei6316/GtestExamp
一、相关工具下载
1、gtest1.6源代码:https://gitee.com/wenfei6316/gtest
2、lcov1.14源代码:https://gitee.com/wenfei6316/lcov
3、json2.9源代码:https://gitee.com/wenfei6316/json2.9
4、测试用例路径:https://gitee.com/wenfei6316/GtestExample
二、安装相关工具:
1、安装gtest,参见https://gitee.com/wenfei6316/gtest里面的安装指导
2、安装lcov,参加https://gitee.com/wenfei6316/lcov里面的安装指导
2、安装json,参加https://gitee.com/wenfei6316/json2.9里面的安装指导
4、安装gcovr:sudo apt-get install gcovr
三、搭建测试用例和生成覆盖率报告:
1、目录结构:
测试文件test.cpp
int Foo(int a, int b)
{
if (a == 0 || b == 0) {
return a + b;
}
int c = a % b;
if (c == 0) {
return b;
}
return c;
}
TEST(FooTest, HandleNoneZeroInput)
{
EXPECT_EQ(0, Foo(0, 0));
}
Makefile内容
CC := g++
CFLAGS += -fprofile-arcs \
-ftest-coverage
LDFLAGS += -lgtest \
-lpthread \
-lgtest_main
SRC += ./src/test.cpp
OBJ += ./tmp/test
INFOFILE = ./tmp/test.info
RESULT = result
INDEX = ./${RESULT}/index.html
all:
mkdir -p ./tmp
$(CC) ${SRC} ${CFLAGS} ${LDFLAGS} -o ${OBJ}
$(OBJ)
mv test.gcda test.gcno ./tmp
lcov -d ./tmp -t test -o ${INFOFILE} -b ./ -c
genhtml -o ${RESULT} ${INFOFILE}
rm ./tmp -rf
firefox ${INDEX}
clean:
rm ./tmp ./result -rf
2、编译测试文件:
g++ test.cpp -fprofile-arcs -ftest-coverage -lgtest -lpthread -lgtest_main -o test
此时会生成test和test.gcno文件
3、运行可执行文件test
./test
此时会生成test.gcda文件
4、生成覆盖率信息
lcov -d . -t unittest -o test.info -b . -c
-d: 存放test.gcda、test.gcno文件的路径
-t: 目标的名称,可不带引号,此处为target
-o: 生成的覆盖率文件,可自定义,可不带引号
-b: 相对目录的起始位置
-c: capture,采集覆盖率
5、生成覆盖率报告
genhtml -o result test.info
6、打开result/index.html即可查看覆盖率情况
可以下载https://gitee.com/wenfei6316/GtestExample里面的用例直接执行make all即可
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)