Clion + GoogleTest实现单元测试

Posted shmilyt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clion + GoogleTest实现单元测试相关的知识,希望对你有一定的参考价值。

环境准备

下载googletest源码

https://github.com/google/googletest/releases/tag/release-1.10.0

应用到项目

这里只使用googletest功能:

CmakeList.txt

# cmake最低版本号要求
cmake_minimum_required(VERSION 3.14)

# 项目名
project(Main)

set(CMAKE_CXX_STANDARD 14)

# 添加头文件
include_directories(
        $CMAKE_CURRENT_SOURCE_DIR/include
        $CMAKE_CURRENT_SOURCE_DIR/googletest/include
)

# 添加下级目录,生成.a文件
add_subdirectory(./googletest)

# 添加连接库
link_directories(
        $CMAKE_CURRENT_SOURCE_DIR/lib
        $CMAKE_CURRENT_SOURCE_DIR/googletest
)

set(SOURCE_FLIES
        main.cpp
        lib/add.cpp
        include/add.h
        )

# 指定可执行文件的生成位置
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "$CMAKE_CURRENT_SOURCE_DIR/bin")

# 指定生成目标
add_executable(MainTest $SOURCE_FLIES)

# 将目标文件与库文件进行链接
target_link_libraries(MainTest gtest)

add.h和add.cpp就是一个简单的求和函数

main.cpp:

#include "add.h"
#include "gtest/gtest.h"



TEST(TestCase,test1 )
    ASSERT_EQ(12,add(4,8));


TEST(TestCase,test2)
    EXPECT_EQ(5,add(2,3));


TEST(TestCase,test3)
    EXPECT_EQ(3,add(1,2));


int main(int argc, char **argv)

    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();


执行效果(也可以单独执行某个case)

[QtCratot]_0_0_googletest单元测试

[QtCratot]_0_0_googletest单元测试

创建时间:20210822 16:36:00

获得googletest工程

  • 下载googletest工程到本地
    • git clone https://github.com/google/googletest.git

创建QT测试工程

  • 添加BaseUtil的测试工程

  • 选择googletest框架和cmake/qmake管理工程, 推荐qmake

  • 执行验证

编写测试用例,及运行后的测试结果

项目整理:GoogleTest可以只留下使用的文件

  • 删除没有用的示例和文档来减少文件管理

    googletest
    ├── googlemock
    │   ├── include
    │   └── src
    └── googletest
        ├── include
        └── src
    
    googletest
    ├── googlemock
    │   ├── include
    │   │   └── gmock
    │   │       ├── gmock-actions.h
    │   │       ├── gmock-cardinalities.h
    │   │       ├── gmock-function-mocker.h
    │   │       ├── gmock.h
    │   │       ├── gmock-matchers.h
    │   │       ├── gmock-more-actions.h
    │   │       ├── gmock-more-matchers.h
    │   │       ├── gmock-nice-strict.h
    │   │       ├── gmock-spec-builders.h
    │   │       └── internal
    │   │           ├── custom
    │   │           │   ├── gmock-generated-actions.h
    │   │           │   ├── gmock-matchers.h
    │   │           │   ├── gmock-port.h
    │   │           │   └── README.md
    │   │           ├── gmock-internal-utils.h
    │   │           ├── gmock-port.h
    │   │           └── gmock-pp.h
    │   └── src
    │       ├── gmock-all.cc
    │       ├── gmock-cardinalities.cc
    │       ├── gmock.cc
    │       ├── gmock-internal-utils.cc
    │       ├── gmock_main.cc
    │       ├── gmock-matchers.cc
    │       └── gmock-spec-builders.cc
    └── googletest
        ├── include
        │   └── gtest
        │       ├── gtest-death-test.h
        │       ├── gtest.h
        │       ├── gtest-matchers.h
        │       ├── gtest-message.h
        │       ├── gtest-param-test.h
        │       ├── gtest_pred_impl.h
        │       ├── gtest-printers.h
        │       ├── gtest_prod.h
        │       ├── gtest-spi.h
        │       ├── gtest-test-part.h
        │       ├── gtest-typed-test.h
        │       └── internal
        │           ├── custom
        │           │   ├── gtest.h
        │           │   ├── gtest-port.h
        │           │   ├── gtest-printers.h
        │           │   └── README.md
        │           ├── gtest-death-test-internal.h
        │           ├── gtest-filepath.h
        │           ├── gtest-internal.h
        │           ├── gtest-param-util.h
        │           ├── gtest-port-arch.h
        │           ├── gtest-port.h
        │           ├── gtest-string.h
        │           └── gtest-type-util.h
        └── src
            ├── gtest-all.cc
            ├── gtest.cc
            ├── gtest-death-test.cc
            ├── gtest-filepath.cc
            ├── gtest-internal-inl.h
            ├── gtest_main.cc
            ├── gtest-matchers.cc
            ├── gtest-port.cc
            ├── gtest-printers.cc
            ├── gtest-test-part.cc
            └── gtest-typed-test.cc
    
    12 directories, 57 files
    
  • 项目整理:将GoogleTest的配置文件,直接写到pro文件中

    # GoogleTest配置
    isEmpty(GOOGLETEST_DIR) {
        warning("Using googletest src dir specified at Qt Creator wizard")
        message("set GOOGLETEST_DIR as environment variable or qmake variable to get rid of this message")
        GOOGLETEST_DIR = ../googletest
    }
    
    !isEmpty(GOOGLETEST_DIR): {
        GTEST_SRCDIR = $$GOOGLETEST_DIR/googletest
        GMOCK_SRCDIR = $$GOOGLETEST_DIR/googlemock
    }
    
    requires(exists($$GTEST_SRCDIR):exists($$GMOCK_SRCDIR))
    
    !exists($$GOOGLETEST_DIR):message("No googletest src dir found - set GOOGLETEST_DIR to enable.")
    
    DEFINES += \\
        GTEST_LANG_CXX11
    
    INCLUDEPATH *= \\
        $$GTEST_SRCDIR \\
        $$GTEST_SRCDIR/include \\
        $$GMOCK_SRCDIR \\
        $$GMOCK_SRCDIR/include
    
    SOURCES += \\
        $$GTEST_SRCDIR/src/gtest-all.cc \\
        $$GMOCK_SRCDIR/src/gmock-all.cc
    

以上是关于Clion + GoogleTest实现单元测试的主要内容,如果未能解决你的问题,请参考以下文章

单元测试框架GoogleTest

GoogleTest 的 CLion 教程:将 STATIC 更改为 SHARED 库崩溃

[QtCratot]_0_0_googletest单元测试

[QtCratot]_0_0_googletest单元测试

一文掌握谷歌 C++ 单元测试框架 GoogleTest

一文掌握谷歌 C++ 单元测试框架 GoogleTest