← 所有精選

GitHub Trending 精選

每日一個爆紅開源專案

日榜 #12026-07-12

catchorg/Catch2

A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later (C++11 support is in v2.x branch, and C++03 on the Catch1.x branch)

★ 21.0k stars · ▲ +113 今日 · 🔶 C++ · 📜 BSL-1.0 · 官網在 GitHub 開啟 ↗
bddcppcpp14frameworkno-dependenciestddtest-frameworktesting

這是什麼

Catch2 是一個以 C++ 原生語法 為核心的測試框架,主要用於單元測試,同時也提供基本的微基準測試能力與簡單的 BDD 巨集。它的定位不是把測試寫成另一套 DSL,而是讓測試看起來盡量像一般 C++:測試名稱不必是合法識別字,斷言可以直接寫成布林表達式,SECTION 則讓共用的 setup/teardown 保持在局部、可讀的範圍內。README 也特別指出,Catch2 v3 已不再是過去那種 single-header library,而是改成多個 header 加上需分開編譯的正常函式庫形式,這對整合方式與從 v2 遷移的專案都很關鍵。

為什麼上榜

這次 Catch2 以 21,023 stars、今日新增 113 stars 登上日榜,熱度很可能來自它在 C++ 測試生態中的長期辨識度:它既能支援 TDD/BDD 這類開發流程,又維持相對自然的 C++ 寫法,對不想在測試框架語法上付出太多心智成本的團隊很有吸引力。README 強調的亮點其實很務實:斷言像普通 C++ 條件、測試名稱可以是可讀句子、區段化測試能局部共享初始化邏輯。值得注意的是,v3 的架構變更也代表它不是「丟一個 header 就完事」的工具;對既有 v2 使用者而言,遷移文件與編譯整合會是評估重點。

適合誰,可以拿來做什麼

Catch2 適合正在寫 C++14、C++17 或更新版本專案、需要導入 unit tests、TDD 或簡單 BDD 風格測試的開發者。README 的範例涵蓋了典型函式測試,也示範如何用 [!benchmark] 標籤撰寫微基準測試;不過它也提醒 benchmark 預設不會執行,必須明確指定標籤。對函式庫作者、系統程式開發者、需要在 CI 中穩定跑 C++ 測試的團隊來說,Catch2 的價值在於讓測試案例保持直觀,並提供文件、教學與 reference 作為後續查詢入口。若你使用的是舊版 C++,README 只說 C++11 支援在 v2.x 分支,C++03 則在 Catch1.x 分支。

上手

README 沒有提供完整的安裝指令;它主要給出範例程式與文件入口。最基本的使用方式是引入 Catch2 的測試巨集 header,撰寫 TEST_CASE,再用 REQUIRE 驗證結果:

#include <catch2/catch_test_macros.hpp>

TEST_CASE("Factorials are computed", "[factorial]") {
    REQUIRE(factorial(1) == 1);
    REQUIRE(factorial(2) == 2);
    REQUIRE(factorial(3) == 6);
}

若要做微基準測試,README 示範需另外引入 benchmark header,並以 [!benchmark] 標籤標記;這類測試 預設不會執行,需要在執行測試時明確選取該標籤。更完整的入門與細節,README 指向 tutorial、reference,以及 v2 遷移到 v3 的文件。

README 重點摘要