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
分支。
本文檔包括以下三個部分: