CLion 2026.2 Help

Doctest

Doctest (英語) は、自己登録テストを備えた単一ヘッダーフレームワークです。 ドキュメント(英語)に記載されているように、Doctest は Catch の後に設計されており、Catch のコードの一部を共有しています (doctest と Catch の違い(英語)を参照)。

Doctest は モッキングをサポートしていません(英語)が、 trompeloeil(英語)googlemock(英語) 、または FakeIt(英語) などのサードパーティのモッキングライブラリと統合できます。

Doctest の基本

Doctest に詳しくない場合は、以下で主な概念の説明を参照してください。

サンプルテスト

Doctest で書かれた簡単なテストは次のようになります:

// provides main(); this line is required in only one .cpp file #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" //function to be tested int fact(int n) { return n <= 1 ? n : fact(n - 1) * n; } TEST_CASE("testing the factorial function") { CHECK(fact(0) == 1); // should fail CHECK(fact(1) == 1); CHECK(fact(2) == 2); CHECK(fact(3) == 6); CHECK(fact(10) == 3628800); }

上記の例では、 階乗関数のテストは自由形式のテスト名であり、一意である必要はありません。 CHECK は、Doctest の アサーションマクロ(英語)の 1 つです。

テストケース、サブテスト、スイート

Doctest は、共通のセットアップとティアダウンを共有するネストされたテストを作成するためのサブケースのメカニズムを提供します(ただし、クラスベースのフィクスチャも サポートされています(英語))。

TEST_CASE("vectors can be sized and resized") { std::vector<int> v(5); REQUIRE(v.size() == 5); REQUIRE(v.capacity() >= 5); SUBCASE("adding to the vector increases its size") { v.push_back(1); CHECK(v.size() == 6); CHECK(v.capacity() >= 6); } SUBCASE("reserving increases just the capacity") { v.reserve(6); CHECK(v.size() == 5); CHECK(v.capacity() >= 6); } }

上記のコードでは、 TEST_CASE() は各 SUBCASE() の最初から実行されます。 2 つの REQUIRE ステートメントは、 サイズ が 5 であり、 capacity が各サブケースのエントリで少なくとも 5 であることを保証します。 CHECK()-s の 1 つが失敗した場合、テストは失敗しましたが、実行は続行されます。 TEST_CASE() を実行するたびに、Doctest は 1 つのサブケースを実行し、他のサブケースをスキップします。 次回は、2 番目が実行されます。

Catch のセクションと同様に、サブケースをネストして、チェック操作のシーケンスを作成できます。 各リーフサブケース(内部にネストされたサブケースのないサブケース)は 1 回実行されます。 親サブケースが失敗すると、子サブケースが実行されなくなります。

TEST_SUITE() または TEST_SUITE_BEGIN()/TEST_SUITE_END() マクロを使用して、テストケースをスイートにグループ化できます。

TEST_CASE("") {} // not part of any test suite TEST_SUITE("math") { TEST_CASE("") {} // part of the math test suite TEST_CASE("") {} // part of the math test suite } TEST_SUITE_BEGIN("utils"); TEST_CASE("") {} // part of the utils test suite TEST_SUITE_END(); TEST_CASE("") {} // not part of any test suite

Doctest は BDD スタイルの構文(英語)もサポートしています。

CLion での Doctest の操作

Doctest をプロジェクトに追加する

  1. doctest.h の最新バージョンを ダウンロード(英語)して、プロジェクトツリーにコピーします。

    サポートされている最小バージョンは 2.3.0 です。

  2. テストファイルにヘッダーを含めます。

    #include "doctest.h"
  3. 1 つのヘッダーファイルのみで、 #含める の前に #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN を付けます。

    独自の main を提供する必要がある場合は、 これらの手順(英語)を参照してください。

自動的に作成された Doctest 構成を実行 / デバッグする

CLion はプロジェクト内の Doctest テストを検出し、それらの実行 / デバッグ構成を作成します。

  1. この構成をすぐに使用して、プロジェクト内のすべての Doctest テストを実行またはデバッグできます:

    自動的に作成された Doctest 構成

新しい Doctest 実行 / デバッグ構成を追加する

  1. 実行 | 実行構成の編集​ に進みます。

  2. をクリックし、テンプレートのリストから Doctest を選択します。

    Doctest 構成の追加
  3. doctest 構成設定
    • 命名方法名 フィールドに構成名を設定してください。 この名前は、利用可能な実行 / デバッグ構成のリストに表示されます。

    • 特定のテストまたはスイートを実行するには、このオプションを選択します。

      スイート フィールドで、スイート名を指定します。 入力を開始すると、自動補完が利用可能なスイートを提案します。

      スイート名の自動補完

      テスト フィールドで、目的のテストを選択します。 スイート全体を実行するには、このフィールドを残します。

      スイートからのテストの選択

      このオプションを選択して、単一のテストを指定するか、一連のテストを定義します。

      • filename.cpp ですべてのテストを実行する [#*filename.cpp]

      • [suite_name] は、対応する名前でスイートを実行します。

      • [suite_name][test_name] または [suite_name][test_name][subtest_name] は、特定のスイートから特定のテストを実行します。

      • [][][] )を使用して匿名スイートを参照しますが、必ずテスト名を追加してください。

      カンマで区切ったリストで複数のパターンを指定できます。例えば:

      Doctest 構成のパターン

      または、 スイート フィールドと テスト フィールドを空のままにして、代わりに プログラム引数 を介して Doctest の コマンドラインフラグ(英語)を指定することもできます。

    • ターゲット​ フィールドで、リストから目的のターゲットを選択します。

  4. 構成を保存するには、 変更を適用 をクリックします。

  5. スイッチャーで新しく作成した構成を選択し、 を実行または でデバッグします。

    Doctest 構成の実行 / ダバッグ

テストを実行

  • CLion でテストを実行またはデバッグする最も簡単な方法は、ガターアイコンを使うことです:

    テスト用のガターのアイコン

    ガターアイコンは、テスト結果(すでに利用可能な場合)も表示します: 成功 または失敗

  • ガターアイコンでテスト / スイート / フィクスチャを実行すると、CLion は 一時的なDoctest 構成を作成し、構成リストではグレー表示されます。 一時構成を保存するには、 実行構成の編集 ダイアログでそれを選択し、 をクリックします。

    一時的なテスト構成の保存

テスト結果を調べる

テストを実行すると、CLion は組み込みの テストランナーウィンドウに結果とプロセスを表示します。 テストツリーには、実行中のすべてのテストが 1 つずつ表示されます。 テストランナーウィンドウには次のものが含まれます。

  • これまでに実行されたテストの割合を示す プログレスバー

  • 実行中のすべてのテストとそのステータスおよび期間の ツリービュー

  • テストの出力ストリーム

  • 失敗した テストを再実行するオプションを備えた ツールバー 、自動的に保存された以前の結果をインポート / エクスポートまたは開く 、特定のテストを簡単に見つけるためにテストをアルファベット順に並べ替える、または期間ごとに並べ替える 他のテストよりも長く実行されたテストを理解するためのオプション。

テストランナーウィンドウ
2026 年 7 月 15 日