Catch2
v3.7.1
Catch2 主要是 C++ 的单元测试框架,但它也提供基本的微基准测试功能和简单的 BDD 宏。
Catch2 的主要优点是使用起来既简单又自然。测试名称不必是有效的标识符,断言看起来像普通的 C++ 布尔表达式,并且节提供了一种在测试中共享设置和拆卸代码的良好本地方法。
单元测试示例
# 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 );
}
微基准示例
# include < catch2/catch_test_macros.hpp >
# include < catch2/benchmark/catch_benchmark.hpp >
# include < cstdint >
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 );
REQUIRE ( fibonacci ( 20 ) == 6'765 );
BENCHMARK ( " fibonacci 20 " ) {
return fibonacci ( 20 );
};
REQUIRE ( fibonacci ( 25 ) == 75'025 );
BENCHMARK ( " fibonacci 25 " ) {
return fibonacci ( 25 );
};
}
请注意,默认情况下不会运行基准测试,因此您需要使用[!benchmark]
标签显式运行它。
您位于devel
分支,正在开发 v3 版本。 v3 带来了一系列重大变化,其中最大的变化是 Catch2 不再是单标头库。 Catch2 现在的行为与普通库一样,具有多个标头和单独编译的实现。
文档正在慢慢更新以考虑这些更改,但这项工作目前仍在进行中。
要从 v2 版本迁移到 v3,您应该查看我们的文档。它提供了简单的入门指南,并收集了最常见的迁移问题。
对于 Catch2 的先前主要版本,请查看 GitHub 上的v2.x
分支。
本文档包括以下三个部分: