GoogleTest快速入门:使用CMake构建C++单元测试项目

【免费下载链接】googletest 【免费下载链接】googletest 项目地址: https://gitcode.com/gh_mirrors/goo/googletest

前言

GoogleTest是Google开发的一个C++测试框架,广泛应用于各类C++项目的单元测试中。本文将详细介绍如何使用CMake构建系统快速搭建一个基于GoogleTest的测试项目,适合初次接触GoogleTest的开发者快速上手。

环境准备

在开始之前,请确保您的开发环境满足以下要求:

  1. 操作系统:支持Linux、macOS或Windows系统
  2. 编译器:支持C++14或更高标准的C++编译器(如GCC、Clang、MSVC等)
  3. 构建工具:
    • CMake 3.14或更高版本
    • 配套的构建工具(如Make、Ninja等)

项目初始化

首先创建一个项目目录并初始化CMake配置文件:

mkdir my_project && cd my_project

在项目目录中创建CMakeLists.txt文件,这是CMake的构建配置文件。

配置CMake文件

以下是完整的CMakeLists.txt配置示例:

cmake_minimum_required(VERSION 3.14)
project(my_project)

# 设置C++标准为C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 使用FetchContent模块引入GoogleTest
include(FetchContent)
FetchContent_Declare(
  googletest
  URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)

# Windows平台特殊设置
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)

这段配置做了以下几件事:

  1. 指定了CMake的最低版本要求
  2. 设置了项目名称
  3. 配置了C++14标准
  4. 使用FetchContent模块从网络获取GoogleTest源码

编写测试代码

创建一个简单的测试文件hello_test.cc:

#include <gtest/gtest.h>

// 基础断言示例
TEST(HelloTest, BasicAssertions) {
  // 验证两个字符串不相等
  EXPECT_STRNE("hello", "world");
  // 验证数学运算结果
  EXPECT_EQ(7 * 6, 42);
}

这个测试用例展示了GoogleTest的基本断言功能:

  • EXPECT_STRNE用于验证字符串不相等
  • EXPECT_EQ用于验证数值相等

配置测试构建

在CMakeLists.txt末尾添加测试构建配置:

enable_testing()

add_executable(
  hello_test
  hello_test.cc
)
target_link_libraries(
  hello_test
  GTest::gtest_main
)

include(GoogleTest)
gtest_discover_tests(hello_test)

这段配置:

  1. 启用测试功能
  2. 创建可执行测试程序
  3. 链接GoogleTest库
  4. 配置测试发现功能

构建并运行测试

执行以下命令完成构建和测试:

# 配置构建系统
cmake -S . -B build

# 编译项目
cmake --build build

# 运行测试
cd build && ctest

成功运行后,您将看到类似如下的输出:

Test project .../my_project/build
    Start 1: HelloTest.BasicAssertions
1/1 Test #1: HelloTest.BasicAssertions ........   Passed    0.00 sec

100% tests passed, 0 tests failed out of 1

进阶学习

成功运行第一个测试后,您可以进一步探索GoogleTest的更多功能:

  1. 测试夹具:用于创建测试共享环境
  2. 参数化测试:使用不同参数运行相同测试
  3. 死亡测试:验证程序是否按预期终止
  4. Mock功能:创建模拟对象进行隔离测试

常见问题解答

Q: 如何更新GoogleTest版本? A: 修改FetchContent_Declare中的commit hash为最新版本即可。

Q: 为什么需要设置C++14标准? A: GoogleTest从1.10.0版本开始需要C++14支持,这是框架的最低要求。

Q: Windows下有什么特殊注意事项? A: Windows平台需要设置gtest_force_shared_crt选项以确保使用正确的运行时库。

通过本教程,您已经掌握了使用CMake构建GoogleTest测试项目的基本方法。接下来可以尝试为您的实际项目添加更多测试用例,逐步构建完善的测试体系。

【免费下载链接】googletest 【免费下载链接】googletest 项目地址: https://gitcode.com/gh_mirrors/goo/googletest

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐