在 CLion 中使用 Google Test 进行单元测试
介绍
Google Test(GTest)是 Google 开源的 C++ 单元测试框架,提供了丰富的断言、测试夹具(Fixtures)和测试管理功能,使 C++ 开发者能够编写高效的单元测试。
本博客将介绍如何在不同平台(Windows、macOS、Linux)上,使用 CLion 配置 Google Test 进行 C++ 单元测试,包括安装 Google Test、配置 CMakeLists.txt、编写和运行测试代码,以及如何测试类和使用测试夹具。
1. 安装 Google Test
Google Test 可以通过以下方式安装:
方法 1:使用包管理器安装(推荐)
Windows(vcpkg):
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat
vcpkg install gtest
也可以直接在 CLion 的 vcpkg 安装 gtest:
macOS(Homebrew):
brew install googletest
Linux(APT):
sudo apt install libgtest-dev
安装完成后,库文件存放在 vcpkg/Homebrew/系统库路径下。
方法 2:使用 Git 直接拉取源码
git clone https://github.com/google/googletest.git
cd googletest
mkdir build && cd build
cmake .. -DBUILD_GMOCK=OFF
cmake --build .
方法 3:手动下载和编译
从 Google Test 官方 GitHub 下载 .zip
源码包,解压后放入你的项目目录。
2. 创建 CLion 项目
- 打开 CLion,选择
New Project
。 - 选择
C++ Executable
,然后点击Create
创建一个项目。
3. 配置 CMakeLists.txt
根据不同安装方式修改 CMakeLists.txt
。
方法 1:使用包管理器(vcpkg/Homebrew)
如果报错也没事,在输出的地方点击修复就可以了。
cmake_minimum_required(VERSION 3.30)
project(MyTest)
set(CMAKE_CXX_STANDARD 20)
# 查找 Google Test
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
# 添加测试文件
add_executable(MyTest main.cpp)
# 链接 Google Test 库
target_link_libraries(MyTest GTest::GTest GTest::Main pthread)
# 启用测试
enable_testing()
add_test(NAME MyTest COMMAND MyTest)
方法 2:Git 拉取或手动下载
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/heads/main.zip
)
FetchContent_MakeAvailable(googletest)
add_executable(my_test test.cpp)
target_link_libraries(my_test gtest gtest_main)
enable_testing()
4. 编写测试代码
创建 main.cpp
,编写 Google Test 代码:
#include <gtest/gtest.h>
int Add(int nA, int nB) {
return nA + nB;
}
TEST(AddTest, HandlesAddition) {
EXPECT_EQ(Add(2, 3), 5);
EXPECT_EQ(Add(-2, -5), -7);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
5. 运行 Google Test
方法 1:手动运行
cmake --build .
./MyTest
方法 2:CLion 直接运行
- 不能右键
main.cpp
,选择Run 'main.cpp'
。 - 在 CLion 配置 Google Test
- 打开 “Run” > “Edit Configurations…”
- 点击 “+” 号,选择 Google Test
- 选择
Target
,然后应用并运行
- 查看测试结果
在 CLion 底部的 “Test Runner” 窗口查看测试结果。
6. 处理 Google Test 断言
TEST(SampleTest, Example) {
ASSERT_EQ(1, 1); // 通过
EXPECT_EQ(1, 2); // 失败,但继续执行
ASSERT_EQ(1, 2); // 失败,测试终止
}
7. 使用 Google Test Fixtures(测试夹具)
如果类有状态,可以使用 TEST_F()
共享测试数据。
class MyTestFixture : public ::testing::Test {
protected:
void SetUp() override { nValue = 5; }
void TearDown() override { }
int nValue;
};
TEST_F(MyTestFixture, TestAddition) {
EXPECT_EQ(nValue + 5, 10);
}
8. 解决可能遇到的问题
找不到 Google Test
- 确保
find_package(GTest REQUIRED)
位置正确。 - 使用
vcpkg integrate install
让 CMake 识别vcpkg
。
链接错误(undefined reference to ‘testing::InitGoogleTest’)
- 忘记
target_link_libraries(my_test GTest::GTest GTest::Main)
- 版本不兼容,尝试
FetchContent
方式获取最新版本。
总结
方法 | 适用情况 |
---|---|
包管理器(vcpkg/Homebrew/APT) | 推荐,简单易用 |
Git 方式(FetchContent) | 适用于不同平台 |
手动下载 | 适用于无法联网的情况 |
使用预编译库 | 适用于固定版本 |
Conan 包管理器 | 适用于大型项目 |
不同的方法适用于不同的需求,你可以根据自己的情况选择最佳方案!🚀