windows从零搭建googletest之c++测试工程(CLion)

1. 环境准备

下载链接 版本 备注
系统 ---- win10
代码编辑器 Clion Download 个人使用 CLion 2022.3.2 代码编辑器,看个人喜好
cmake Cmake 官网 cmake version 3.15.2
mingw SOURCEFORGE x86_64-8.1.0-release-posix-seh-rt_v6 这里下载离线版本
googletest GitHub googletest v1.13.0

装好环境之后,要记得添加环境变量

2.编译gtest静态链接库

我们要搭建gtest 测试工程,其实只需要将自己的测试单元程序与googletest的静态库链接起来。

首先命令行进入googletest工程的googletest文件夹目录,修改该目录下的CMakeLists.txt。在顶部加一行

set(GOOGLETEST_VERSION 1.13.0)

(如果需要生成gtest动态库,需要多做一步,将 BUILD_SHARED_LIBS 改为ON 即可)

在googletest工程根目录创建build文件夹,并进入build文件夹,更方便的我们可以使用明令行完成

mkdir build
cd build

接下来开始编译

cmake ..\googletest -G "MinGW Makefiles"
// 如果此前执行过cmake没有编译出想要的库,需要先删除CMakeCache.txt再重新执行

生成MakeFile之后,执行build命令

cmake --build .
// 也可以使用 mingw32-make

编译成功后,会在build文件夹下新生成一个lib文件夹保存 libgtest.a、libgtest_main.a。这两个静态库就是我们搭建自己的单元工程需要的。

windows从零搭建googletest之c++测试工程(CLion)_第1张图片

 3.搭建单元测试工程

  • 按照下面的目录结构创建好之后,将 googtest文件夹下的include头文件拷贝到gtest/include下,将 libgtest.a、libgtest_main.a 静态库拷贝至lib文件夹下
GTest
├─.idea
├─build       // 用于编译
├─inc         // 保存src下cpp文件的头文件
├─lib         // 用于保存src文件夹下生成的静态库
├─opensource  // 保存开源组件
│  └─gtest
│      ├─include   // googletest目录下includ文件夹的头文件
│      └─lib       // 用于存放前面生成的 libgtest.a、libgtest_main.a
├─src
└─test
    └─lib         // 用于保存生成的测试用的可执行文件
  • 在CTest/src下面创建 add.cpp 和 CMakeList.txt
// add.cpp
#include "add.h"

int add(int n1,int n2)
{
    return n1+n2;
}
// CMakeList.txt
aux_source_directory(. SRC_LIST)

#windows系统动态库生成lib文件命令
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

# 添加头文件路径
include_directories(${PROJECT_SOURCE_DIR}/inc)

set(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")

message("start add_library add")
add_library(add ${SRC_LIST})
message("add_library add finished")
  • 在GTest根目录创建 CMakeList.txt
// CMakeList.txt
SET(CMAKE_C_COMPILER gcc)
SET(CMAKE_CXX_COMPILER g++)
SET(CMAKE_CXX_STANDARD 17)

cmake_minimum_required(VERSION 3.15)
project(GTest)

add_subdirectory(src)
add_subdirectory(test)
  • 在GTest/test目录下新建TestForAdd.cpp和CMakeList.txt
// CMakeList.txt
aux_source_directory(. TEST_LIST)

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

# 指定.h头文件目录
include_directories(${PROJECT_SOURCE_DIR}/inc
                    ${PROJECT_SOURCE_DIR}/opensource/gtest/include)

# 指定静态链接库文件目录
link_directories(${PROJECT_SOURCE_DIR}/opensource/gtest/lib)

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

add_executable(test_add ${TEST_LIST})

target_link_libraries(test_add gtest gtest_main add)
// TestForAdd.cpp
#include 
#include "add.h"
#include "gtest/gtest.h"

class TestForAdd : public testing::Test {
    void SetUp() {}

    void TearDown(){}
};

TEST_F(TestForAdd,test1){
    ASSERT_EQ(12,add(4,8));
}

TEST_F(TestForAdd,test2){
    EXPECT_EQ(5,add(2,3));
}

TEST_F(TestForAdd,test3){
    EXPECT_EQ(4,add(1,2));
}

int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

4.编译并运行测试程序

进入GTest/build目录,开始编译

cmake ..  -G "MinGW Makefiles"
// 失败删除CMakeCache.txt
cmake --build . 

命令行进入GTest/test/lib ,执行生成的 test_add.exe

cd .\test\lib\
 .\test_add.exe

执行结果

windows从零搭建googletest之c++测试工程(CLion)_第2张图片

5. 源代码

GoogleTest · GitCode

你可能感兴趣的:(c++,windows,单元测试)