在 macOS 上使用 CLion 进行 Google Test 单元测试

介绍

Google Test(GTest)是 Google 开源的 C++ 单元测试框架,它提供了简单易用的断言、测试夹具(Fixtures)和测试运行机制,使 C++ 开发者能够编写高效的单元测试。

本博客将介绍如何在 macOS 上使用 CLion 配置 Google Test 进行 C++ 单元测试,包括安装 Google Test、配置 CMakeLists.txt、编写和运行测试代码,以及如何测试类和使用测试夹具。


1. 安装 Google Test

Google Test 在 macOS 上可以使用 Homebrew 安装:

sh 复制代码
brew install googletest

安装完成后,库文件通常会存放在 /usr/local/Cellar/googletest/ 目录下(具体路径可通过 brew info googletest 查看)。


2. 创建 CLion 项目

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

3. 配置 CMakeLists.txt

方式 1:使用 Homebrew 安装的 Google Test

如果通过 brew install googletest 安装了 Google Test,可以这样配置 CMakeLists.txt:

cmake 复制代码
cmake_minimum_required(VERSION 3.30)
project(MyGoogleTestProject)

set(CMAKE_CXX_STANDARD 20)

# 查找 Google Test
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})

# 添加测试文件
add_executable(MyGoogleTestProject main.cpp)

# 链接 Google Test 库
target_link_libraries(MyGoogleTestProject GTest::GTest GTest::Main pthread)

# 启用测试
enable_testing()
add_test(NAME MyGoogleTestProject COMMAND MyGoogleTestProject)

方式 2:使用 Git 方式引入 Google Test

如果希望将 Google Test 作为项目的一部分,可以在 CMakeLists.txt 中手动拉取 Google Test:

cmake 复制代码
cmake_minimum_required(VERSION 3.10)
project(MyGoogleTestProject)

set(CMAKE_CXX_STANDARD 17)

# 下载 Google Test(如果未安装)
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)

# 链接 Google Test
target_link_libraries(my_test gtest gtest_main)

# 启用测试
enable_testing()

4. 编写测试代码

在项目根目录下创建 main.cpp 文件,并编写测试代码,例如:

cpp 复制代码
#include <gtest/gtest.h>

// 测试函数
int Add(int nA, int nB) {
    return nA + nB;
}

// 测试用例
TEST(AddTest, HandlesPositiveNumbers) {
    EXPECT_EQ(Add(2, 3), 5);
}

TEST(AddTest, HandlesNegativeNumbers) {
    EXPECT_EQ(Add(-2, -3), -5);
}

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

如果需要测试类的成员函数如下:

  • 创建 Calculator 类,该类提供加法和减法功能。
  • 编写 Google Test 测试。

Calculator 类的头文件:

cpp 复制代码
#ifndef CALCULATOR_H
#define CALCULATOR_H

class Calculator {
public:
    int Add(int nA, int nB);
    int Subtract(int nA, int nB);
};

#endif // CALCULATOR_H

Calculator 类的源文件:

cpp 复制代码
#include "Calculator.h"

int Calculator::Add(int nA, int nB) {
    return nA + nB;
}

int Calculator::Subtract(int nA, int nB) {
    return nA - nB;
}

为 Calculator 编写测试,创建 calculator_test.cpp 文件:

cpp 复制代码
#include <gtest/gtest.h>
#include "Calculator.h"

// 测试 Add 方法
TEST(CalculatorTest, HandlesAddition) {
    Calculator calculator;
    EXPECT_EQ(calculator.Add(3, 4), 7);
    EXPECT_EQ(calculator.Add(-2, -5), -7);
    EXPECT_EQ(calculator.Add(10, -5), 5);
}

// 测试 Subtract 方法
TEST(CalculatorTest, HandlesSubtraction) {
    Calculator calculator;
    EXPECT_EQ(calculator.Subtract(10, 3), 7);
    EXPECT_EQ(calculator.Subtract(5, 8), -3);
    EXPECT_EQ(calculator.Subtract(-5, -10), 5);
}

测试类的成员函数的结果:


5. 运行 Google Test

方法 1:手动运行

在 CLion 终端中执行:

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

你应该会看到 Google Test 的输出结果。

方法 2:CLion 直接运行

  1. 在 CLion 运行

  2. 使用 Google Test 配置

    • 点击 CLion 顶部菜单 "Run" > "Edit Configurations..."
    • 点击 "+" 号,选择 Google Test
    • 选择 Target,然后应用并运行
  3. 查看测试结果

    在 CLion 底部的 "Test Runner" 窗口,你可以看到测试是否通过。


6. 添加更多测试

如果你有多个测试文件,比如 math_test.cppstring_test.cpp,可以这样修改 CMakeLists.txt

cmake 复制代码
add_executable(math_test math_test.cpp)
add_executable(string_test string_test.cpp)

target_link_libraries(math_test GTest::GTest GTest::Main)
target_link_libraries(string_test GTest::GTest GTest::Main)

add_test(NAME MathTest COMMAND math_test)
add_test(NAME StringTest COMMAND string_test)

然后在终端运行:

sh 复制代码
ctest

这样可以一次性运行所有测试。


7. 处理 Google Test 断言

Google Test 断言分为 ASSERT_EXPECT_

  • EXPECT_EQ(a, b): 继续运行,报告错误
  • ASSERT_EQ(a, b): 立即终止当前测试

例如:

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

8. 使用 Google Test Fixtures

Google Test 提供 Fixture(测试夹具),用于在多个测试用例间共享资源:

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);
}

总结

  1. 安装 Google Test (brew install googletest 或 CMake FetchContent)
  2. 配置 CMakeLists.txt
  3. 编写 Google Test 代码
  4. 运行 Google Test
  5. 在 CLion 进行 Google Test 配置
  6. 使用 CTest 运行所有测试
  7. 使用断言 EXPECT_ / ASSERT_
  8. 使用 Test Fixture 进行高级测试

这样,你就能在 macOS + CLion 环境下使用 Google Test 进行 C++ 单元测试了!🚀

相关推荐
knowledgebao4 小时前
osxcross 搭建 macOS 交叉编译环境
macos·策略模式
V丶Chao4 小时前
VSCode安装与环境配置(Mac环境)
ide·vscode·macos
cmoaciopm5 小时前
MacOS 10.15上能跑大语言模型吗?
人工智能·macos
悟能不能悟7 小时前
如何提高单元测试的覆盖率
单元测试
xixixiLucky10 小时前
mockMvc构建web单元测试学习笔记
单元测试
大米饭6618 小时前
解决Mac 安装 PyICU 依赖失败
macos·ragflow
我该如何取个名字18 小时前
Mac配置Java的环境变量
java·开发语言·macos
黑心老人19 小时前
Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
linux·运维·服务器·macos
我的代码永没有bug19 小时前
day1-小白学习JAVA---JDK安装和环境变量配置(mac版)
java·学习·macos
孤寂码农_defector1 天前
鸿蒙系统的 “成长烦恼“:生态突围与技术迭代的双重挑战
macos·华为·objective-c·cocoa·harmonyos