在 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):

sh 复制代码
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat
vcpkg install gtest

也可以直接在 CLion 的 vcpkg 安装 gtest:

macOS(Homebrew):

sh 复制代码
brew install googletest

Linux(APT):

sh 复制代码
sudo apt install libgtest-dev

安装完成后,库文件存放在 vcpkg/Homebrew/系统库路径下。

方法 2:使用 Git 直接拉取源码

sh 复制代码
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 项目

  1. 打开 CLion,选择 New Project
  2. 选择 C++ Executable,然后点击 Create 创建一个项目。

3. 配置 CMakeLists.txt

根据不同安装方式修改 CMakeLists.txt

方法 1:使用包管理器(vcpkg/Homebrew)

如果报错也没事,在输出的地方点击修复就可以了。

cmake 复制代码
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 拉取或手动下载

cmake 复制代码
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 代码:

cpp 复制代码
#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:手动运行

sh 复制代码
cmake --build .
./MyTest

方法 2:CLion 直接运行

  1. 不能右键 main.cpp,选择 Run 'main.cpp'
  2. 在 CLion 配置 Google Test
    • 打开 "Run" > "Edit Configurations..."
    • 点击 "+" 号,选择 Google Test
    • 选择 Target,然后应用并运行
  3. 查看测试结果
    在 CLion 底部的 "Test Runner" 窗口查看测试结果。

6. 处理 Google Test 断言

cpp 复制代码
TEST(SampleTest, Example) {
    ASSERT_EQ(1, 1); // 通过
    EXPECT_EQ(1, 2); // 失败,但继续执行
    ASSERT_EQ(1, 2); // 失败,测试终止
}

7. 使用 Google Test Fixtures(测试夹具)

如果类有状态,可以使用 TEST_F() 共享测试数据。

cpp 复制代码
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 包管理器 适用于大型项目

不同的方法适用于不同的需求,你可以根据自己的情况选择最佳方案!🚀

相关推荐
辛苦才能19 分钟前
C++多态原理:虚函数表的内存布局与动态绑定的汇编真相
开发语言·c++
西西弗Sisyphus29 分钟前
Qt 实现一个 水波进度球
c++·qt·c
无忧.芙桃30 分钟前
数据结构之排序算法(中):冒泡排序与快速排序,从相邻交换到工程级优化
c语言·c++·排序算法
Hhy_110736 分钟前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
qq_199886871 小时前
第7板块·第1节:通用算子分类与设计模式
c++·人工智能·gpu算力·cuda
6Hzlia3 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
神仙别闹9 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员9 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
qq_1998868712 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
汉克老师13 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程