Catch2 是一个原生 C++ 测试框架,支持单元测试、TDD 和 BDD,并可做微基准测试。其核心优势在于使用简单自然:测试名不必是合法标识符,断言像普通 C++ 布尔表达式,section 机制能优雅共享 setup/teardown 代码。
v3 版本带来重大变化,Catch2 不再是一个单头文件库,转而成为包含多个头文件和单独编译实现的常规库。迁移指南和文档正在逐步更新。
示例:单元测试
```cpp
#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] 标签)
```cpp
#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>
uint64_t fibonacci(uint64_t number) {
return number < 2 ? number : fibonacci(number-1) + fibonacci(number-2);
}
TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
REQUIRE(fibonacci(5) == 5);
BENCHMARK("fibonacci 20") { return fibonacci(20); };
REQUIRE(fibonacci(25) == 75'025);
BENCHMARK("fibonacci 25") { return fibonacci(25); };
}
```
迁移至 v3 时,建议参考官方迁移指南,v2.x 版本仍可从 GitHub 的对应分支获取。
项目仓库:GitHub
#GitHub #开源 #Catch2 #C++ #测试框架 #单元测试 #BDD #基准测试 #TDD
@GitHubTrendingHub