CLion 2024.1 ヘルプ

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 ステートメントは、size が 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 つのヘッダーファイルのみで、#include の前に #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN を付けます。

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

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

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

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

    The automatically created Doctest configuration

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

  1. 実行 | 実行構成の編集に移動します。

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

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

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

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

      Auto-completion for suite names

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

      Selecting a test from a suite

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

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

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

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

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

      いくつかのパターンをコンマ区切りのリストで指定できます。例:

      Pattern for a Doctest configuration

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

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

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

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

    Run/dubug a Doctest configuration

テストの実行

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

    Gutter icons for tests

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

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

    Saving a temporary test configuration

テスト結果を調べる

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

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

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

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

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

The Test runner window

関連ページ:

テストの実行、デバッグ、終了

ファイルまたはフォルダー内で直接テストを実行するテストを開始する前に特定のアクションが必要なく、コードカバレッジなどの追加オプションを構成したくない場合は、次のオプションを使用してテストを実行できます。テストまたはテストスイート / フィクスチャの横にあるガターアイコンをクリックします。ガターアイコンは、テストの状態に応じて変化します。ガターアイコンは、一連のテストを示します。ガターアイコンは、新しいテストをマークします。ガターアイコンは、成功したテストを示します。ガターアイコンは、失敗したテス...

実行 / デバッグ構成

CLion は、実行 / デバッグ構成を使用して、コードを実行、デバッグ、テストします。各構成は、何を実行し、どのパラメーターと環境を使用するかを定義する、名前付きのスタートアッププロパティのセットです。実行 / デバッグ構成には 2 つのタイプがあります。一時的 — テスト、テストスイート、フィクスチャ、エントリを実行 / デバッグするたびに作成され、ガターアイコン / を使用します。永続的 — テンプレートから明示的に作成されるか、一時的な構成を保存することによって作成されます。永続的な構成は、削除...

テスト結果を調べる

CLion は、実行ツールウィンドウのテストランナータブにテスト結果を表示します。右側のコンソールには、現在のテストセッションの出力が表示されます。テストの実行に関する詳細情報と、テストが失敗したか無視された理由を確認できます。テスト結果リストの上にあるテスト結果ツールバーを使用すると、成功したテストと無視されたテストの表示と非表示を切り替えたり、各テストの実行にかかった時間を表示したり、テスト結果をエクスポート、インポート、並べ替えたりすることができます。実行構成タブの各テストの横に、IDE...

CTest

CTest は、CMake の一部として配布されているテスト自動化ツールです。CTest の実行 / デバッグ構成:CTest を使用するプロジェクトを開くと、CLion はテストを検出し、それらの実行 / デバッグ構成を自動的に作成します。この構成はすべてのテストと呼ばれ、CTest アプリケーションテンプレートに基づいています。ダイアログで、自動的に作成された構成を編集し、同じタイプの構成をさらに追加できます。CTest 構成を作成するメインメニューで、に移動し、をクリックして、テンプレート...

Google Test

Google Test と Google Mock は、強力な単体テストツールのペアです。フレームワークは移植可能であり、致命的および非致命的なアサーションの豊富なセットを含み、フィクスチャおよびテストグループを作成するための機器を提供し、有益なメッセージを提供し、結果を XML でエクスポートします。おそらく唯一の欠点は、プロジェクトで gtest/gmock を使用するためにビルドする必要があることです。Google Test の基本:Google Test に詳しくない場合は、以下でその主な概念の...