• cmake + gtest安装使用 C++单元测试 gcov locv代码覆盖率


    cmake + gtest安装使用 C++单元测试 gcov locv代码覆盖率

    安装gtest

    git clone https://github.com/google/googletest.git
    cd googletest
    mkdir build
    cd build
    cmake ..
    make -j4
    sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    编写CMakeLists.txt

    CMakeLists.txt速查简单编写

    project(test)
    
    set(CMAKE_CXX_STANDARD 11)
    #cmake_minimum_required(VERSION 3.5)
    aux_source_directory(./ SRC)
    message("project for test is ${PROJECT_NAME}")
    
    add_executable(${PROJECT_NAME} ${SRC})
    
    target_link_libraries(${PROJECT_NAME} gtest pthread)
    #target_include_directories(${PROJECT_NAME}
    #)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    代码结构

    ├── main.cpp
    ├── test
    │   ├── CMakeLists.txt
    │   └── test.cpp
    └── utils
        ├── CMakeLists.txt
        ├── common.cpp
        └── common.h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    编写test程序

    #include <iostream>
    #include <gtest/gtest.h>
    
    TEST(HelloTest, BasicAssertions) {
        EXPECT_STRNE("hello", "world");
        EXPECT_EQ(6 * 7, 42);
    }
    
    //xxxxxx自己的test程序
    
    int main(int argc, char **argv) {
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    打开–g3 选项,去掉-O2以上级别的代码优化选项;否则编译器会对代码做一些优化,例如行合并,从而影响行覆盖率结果;这里我比较懒就没有加

    CMakeLists.txt使用gcov编译

    加到test目录下的CMakeLists.txt即可 , 其中代码编译完之后会在test/CMakeFiles/test.dir/ 生成test.cpp.gcno文件, 在运行完test程序之后会在目录下生成test.cpp.gcda文件

    # coverage option
    OPTION (ENABLE_COVERAGE "Use gcov" ON)
    MESSAGE(STATUS ENABLE_COVERAGE=${ENABLE_COVERAGE})
    IF(ENABLE_COVERAGE)
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
        SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
        SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
    ENDIF()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    lcov生成覆盖率报告

    代码中的/home/liar/work2/ 为代码根目录, 请根据自己的目录进行替换

    cd build/test #进入编译后的test目录
    lcov -d /home/liar/work2/ -t test -o test.info -b . -c  --no-external #
    genhtml -o report test.info #
    
    • 1
    • 2
    • 3

    **生成test.info文件, **

    test.info 生成report文件夹, 在report文件夹下的index.html 就是覆盖率报告

    在这里插入图片描述

  • 相关阅读:
    数据结构前言
    laravel+elementui el-upload上传文件
    深度学习YOLO抽烟行为检测 - python opencv 计算机竞赛
    StyleGAN的发展史
    【软件设计师 - 一周通关】1.考试介绍
    论文速览【序列模型 seq2seq】—— 【Ptr-Net】Pointer Networks
    Hooks与事件绑定
    使用SPDK lib搭建自己的NVMe-oF Target应用
    OpenCV-Python学习(13)—— OpenCV 多边形填充与绘制(cv.fillPoly、cv.polylines)
    【科学文献计量】RC.networkOneMode()中的参数解释
  • 原文地址:https://blog.csdn.net/netlogs/article/details/125452117