利用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、目录结构:

利用Gtest和Lcov搭建Unit Test测试环境并生成覆盖率方法_第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即可

利用Gtest和Lcov搭建Unit Test测试环境并生成覆盖率方法_第2张图片

利用Gtest和Lcov搭建Unit Test测试环境并生成覆盖率方法_第3张图片

你可能感兴趣的:(代码测试)