利用Gtest和Lcov搭建Unit Test测试环境并生成覆盖率方法

一、相关工具下载
    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即可

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值