Catch2 / Google Test 用于 C++:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:什么是 Catch2 和 Google Test,为什么需要它们?



在现代 C++ 软件开发中,测试不是奢侈品,而是必需品。单元测试库允许开发人员自动验证程序的各个组件(函数、类、模块)是否正常工作。为此目的,两个最流行的库是 Catch2 和 Google Test (gtest)。



Catch2 是一个现代、轻量级且非常方便的单元测试库。其主要特点是使用宏,使测试可读性强,类似于普通英语。Catch2 支持行为驱动开发(BDD)风格、自动测试注册,并且不需要复杂的配置。



Google Test (gtest) 是 Google 开发的一个强大且成熟的库,是许多大型项目的事实标准。它提供了丰富的断言宏、创建测试固件(test fixtures)的机制、参数化测试以及与 CMake 构建系统的出色集成。



这两个库解决的是同一个问题:允许编写自动运行并报告结果的测试。两者之间的选择通常取决于个人偏好、项目要求或现有基础设施。在本文中,我们将介绍这两个库,因为它们在概念上非常相似,但在语法和 API 上有所不同。



安装



与 Python(使用 pip)不同,C++ 库的安装通常通过系统包管理器或通过与构建系统(例如 CMake)集成来完成。我们来看两种方式。



安装 Catch2

方法 1:通过 vcpkg(推荐)

# 如果尚未安装 vcpkg,请先安装git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh  # 在 Windows 上使用 .\\bootstrap-vcpkg.bat

# 安装 Catch2./vcpkg install catch2

# 与 CMake 集成./vcpkg integrate install


方法 2:仅头文件(最简单)
Catch2 可以作为仅头文件库使用。只需从官方仓库下载 catch.hpp 文件,并将其放入项目文件夹中。然后在代码中引入它:

#define CATCH_CONFIG_MAIN  // 这一行只能出现在一个 .cpp 文件中#include "catch.hpp"


安装 Google Test

方法 1:通过 vcpkg

./vcpkg install gtest./vcpkg integrate install


方法 2:通过 CMake FetchContent(推荐用于使用 CMake 的项目)
在你的 CMakeLists.txt 中添加:

include(FetchContent)FetchContent_Declare(  googletest  GIT_REPOSITORY https://github.com/google/googletest.git  GIT_TAG release-1.12.1)FetchContent_MakeAvailable(googletest)

# 现在你可以为你的测试文件使用 target_link_librariesadd_executable(my_tests test.cpp)target_link_libraries(my_tests GTest::gtest_main)


快速入门及代码示例



让我们编写一个简单的函数,并用这两个库对其进行测试。该函数将计算一个数的阶乘。



Catch2 示例

#define CATCH_CONFIG_MAIN#include "catch.hpp"

// 待测试的函数unsigned int factorial(unsigned int n) { if (n == 0) return 1; return n * factorial(n - 1);}

// 测试用例TEST_CASE("阶乘计算正确", "[factorial]") { REQUIRE(factorial(0) == 1); REQUIRE(factorial(1) == 1); REQUIRE(factorial(2) == 2); REQUIRE(factorial(3) == 6); REQUIRE(factorial(10) == 3628800);}

// 另一个包含分节的测试用例TEST_CASE("检查边界情况", "[factorial][edge]") { SECTIO

推荐