catchorg/Catch2
开发工具面向 C++14 及以上开发者的单元测试与微基准测试框架。
项目介绍
Catch2 是 C++ 原生的测试框架,主要用于单元测试,也支持 TDD 和 BDD 风格写法。断言就是普通的 C++ 布尔表达式,测试名不必是合法标识符,SECTION 可以在测试内部就近共享 setup 和 teardown 代码。框架还提供基础微基准测试和简单的 BDD 宏,让一个库同时覆盖正确性检查和轻量性能测量 (3)。
当前 devel 分支开发的是 Catch2 v3,它不再是单头文件库,而是由多个头文件和单独编译的实现组成的常规库。仍在用 v2 的项目可以查看 v2.x 分支。项目面向使用 C++14 或 C++17 及更高标准的 C++ 开发者。
快速使用
测试文件包含测试宏头文件后,用 TEST_CASE 和 REQUIRE 断言编写用例,例如检查阶乘 (3):
#include <catch2/catch_test_macros.hpp>
#include <cstdint>
uint32_t factorial( uint32_t number ) {
return number <= 1 ? number : factorial(number-1) * number;
}
TEST_CASE( "Factorials are computed", "[factorial]" ) {
REQUIRE( factorial( 1) == 1 );
REQUIRE( factorial( 2) == 2 );
REQUIRE( factorial( 3) == 6 );
REQUIRE( factorial(10) == 3'628'800 );
}
微基准测试在带 [!benchmark] 标签的测试用例中使用 BENCHMARK;基准默认不运行,必须显式选择该标签才会执行 (3)。
完整的入门流程包括获取或安装 v3 库、编译测试可执行文件,这些步骤以维护中的 教程 为准。README 本身没有给出构建系统集成命令,应按教程操作,不要自行猜测。
使用约束
Catch2 v3 面向 C++14 及更高标准;C++11 对应 v2.x 分支,C++03 对应更早的 Catch1.x 分支 (3)。v3 需要作为库构建或链接,不能像单头文件版本那样直接复制一个头文件到源码树。从 v2 升级需要阅读 迁移指南,其中汇总了主要破坏性变更。
项目使用 BSL-1.0 许可证 (1)。README 建议在 issue tracker 报告缺陷,在 Discord 中讨论和提问 (2)。
HotRepo 点评
Catch2 在 HotRepo 2026 年 7 月的全部语言日榜快照中分别记录到 69、117 和 113 个新增 Star。11 月 12 日的快照显示它当天以新增 12 Star 位列 C++ 日榜第 15 名 (1)。这些是彼此独立的日度观察,不构成连续趋势,但说明框架在 C++ 工具链讨论中仍有持续关注。项目自 2010 年发展至今且用户规模较大,对团队更现实的问题是如何按 v3 的库式集成方式接入,以及从 v2 迁移的成本,而不是项目是否活跃。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。