OSS探訪

C++の単体テスト・BDD・簡易ベンチマークを同じテスト実行環境で記述し、CMake/CTestへ組み込む

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
21,504
主要言語
C++
ライセンス
BSL-1.0
リポジトリ最終更新
2026/10/03
ページ内ナビ

概要

Catch2はC++向けのテストframeworkです。TEST_CASEとREQUIREで単体テストを記述し、SECTIONによるsetup共有、BDD形式のmacro、簡易benchmarkも利用できます。CMakeではnamespaced targetを提供し、CTestへのtest自動登録にも対応します。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

通常のC++式に近いassertionでテストを書く

TEST_CASEでtest caseを定義し、REQUIREへboolean expressionを渡して検証します。失敗時には元の式と実際の値を表示でき、専用assertion APIへの変換を最小限にできます。

出典:[1][2]

SECTIONとBDD macroでsetupを局所的に共有する

SECTIONは同じtest case内のsetupを共有しつつ各経路を独立して実行します。SCENARIO、GIVEN、WHEN、THEN等のBDD形式も同じ仕組み上で利用できます。

出典:[2]

CMake targetとCTestへの自動登録を利用する

CMakeではCatch2::Catch2とCatch2::Catch2WithMainを提供し、catch_discover_testsで実行file内のtest caseをCTestへ登録できます。

出典:[3]

向いている用途

CMake中心のC++ projectでtest runnerを統一したい場合に向く

libraryやapplicationの単体テスト、BDD形式のspec、軽量なmicro-benchmarkを同じtest executableとCI flowで管理したい用途に適します。

出典:[1][3]

導入前の確認

v3はsingle-header libraryではない

Catch2 v3は複数headerと別compileのimplementationを持つ通常のlibraryへ変更されています。v2向けのsingle-header導入手順をそのまま使わず、CMake integrationまたはv3用amalgamated distributionを利用します。

出典:[1][5]

C++14以上とCMake構成を前提にする

repository descriptionはv3系をC++14以降向けとして案内し、v3.16.0のtop-level CMakeはCMake 3.16以上を要求します。古いC++11環境ではv2系との違いを確認します。

出典:[6][4]

benchmarkは通常testと実行条件を分けて管理する

Catch2のbenchmarkは通常のtest実行では動かず、[!benchmark] tag等で明示的に実行します。CIのcorrectness testとperformance測定を同一条件として扱わないようにします。

出典:[1][5]

参考にした公式資料

  1. [1]Catch2 v3.16.0 README(2026-10-03)
  2. [2]Catch2 v3.16.0 tutorial(2026-10-03)
  3. [3]Catch2 v3.16.0 CMake integration(2026-10-03)
  4. [4]Catch2 v3.16.0 CMakeLists(2026-10-03)
  5. [5]Catch2 v3.16.0 release(2026-10-03)
  6. [6]catchorg/Catch2 repository(2026-10-03)
  7. [7]Catch2 Boost Software License 1.0(2026-10-03)
編集部からの補足

assertionが通常のC++式に近く、テスト導入時の記述量を抑えたいprojectに向きます。v3はsingle-header前提ではないため、古いv2の記事を流用せずCMake targetやamalgamated distributionなど現在の導入方法を選んでください。

3ステップで試す

  1. 1

    Catch2 v3.16.0をCMakeのFetchContentへ固定する

    CMakeLists.txtでrelease tagを固定し、FetchContent_MakeAvailable(Catch2)後にtest targetをCatch2::Catch2WithMainへlinkします。

    FetchContent_Declare(Catch2 GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_TAG v3.16.0)
  2. 2

    最小のTEST_CASEを作成する

    test.cppへ保存し、通常のC++式をREQUIREで検証する最小testを用意します。

    #include <catch2/catch_test_macros.hpp>\nTEST_CASE("addition") { REQUIRE(1 + 1 == 2); }
  3. 3

    buildしてCTestから実行する

    include(CTest)、Catch2のextrasをCMAKE_MODULE_PATHへ追加したinclude(Catch)、catch_discover_tests(tests)を設定してから実行します。

    cmake -S . -B build && cmake --build build && ctest --test-dir build --output-on-failure
公式READMEで確認

成長

成長の推移 · 直近30日

21,504 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
18
Open PR
59

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • testing
  • test-framework
  • tdd
  • bdd
  • no-dependencies
  • framework
  • cpp14
  • cpp
Stars
21,504
Forks
3,501
Watchers
460
Open Issues
385
Contributors
399
所有者種別
Organization
主要言語
C++
ライセンス
BSL-1.0
リポジトリ最終更新
2026/10/03

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?