下载链接 | 版本 | 备注 | |
系统 | ---- | 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 |
装好环境之后,要记得添加环境变量
我们要搭建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。这两个静态库就是我们搭建自己的单元工程需要的。
GTest
├─.idea
├─build // 用于编译
├─inc // 保存src下cpp文件的头文件
├─lib // 用于保存src文件夹下生成的静态库
├─opensource // 保存开源组件
│ └─gtest
│ ├─include // googletest目录下includ文件夹的头文件
│ └─lib // 用于存放前面生成的 libgtest.a、libgtest_main.a
├─src
└─test
└─lib // 用于保存生成的测试用的可执行文件
// 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")
// 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)
// 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();
}
进入GTest/build目录,开始编译
cmake .. -G "MinGW Makefiles"
// 失败删除CMakeCache.txt
cmake --build .
命令行进入GTest/test/lib ,执行生成的 test_add.exe
cd .\test\lib\
.\test_add.exe
执行结果
GoogleTest · GitCode