CMake: テストケース, サブステップ詳細表示!CTEST_PROGRESS_OUTPUT徹底解説


CTEST_PROGRESS_OUTPUT は、CMake の CTest テストランナーの動作を制御するために使用される環境変数です。 この変数は、テスト実行中に表示される進捗情報量を指定します。

設定値

CTEST_PROGRESS_OUTPUT には、以下の設定値を設定できます。

  • 3
    テストケース、テストステップ、およびサブステップごとに進捗情報が表示されます。
  • 2
    テストケースとテストステップごとに進捗情報が表示されます。
  • 1
    テストケースごとに進捗情報が表示されます。
  • 0
    テスト実行中に進捗情報が表示されません。

デフォルト値

CTEST_PROGRESS_OUTPUT のデフォルト値は 1 です。

使用例

# CMakeLists.txt ファイル

cmake_minimum_required(VERSION 3.10)

project(MyProject)

add_executable(MyTest test.cpp)

add_test(MyTest ${MyTest})

set(CTEST_PROGRESS_OUTPUT 2)

上記の例では、CTEST_PROGRESS_OUTPUT2 に設定することで、テスト実行中にテストケースとテストステップごとに進捗情報が表示されます。

プログラミングでの活用

CTEST_PROGRESS_OUTPUT は、テスト実行の進捗状況を把握するのに役立ちます。 テスト実行時に詳細な進捗情報が必要な場合は、CTEST_PROGRESS_OUTPUT2 または 3 に設定することをお勧めします。

  • テスト実行の進捗状況を把握する他の方法として、ctest --verbose コマンドを使用することもできます。
  • CTEST_PROGRESS_OUTPUT の設定値を 2 または 3 に設定すると、テスト実行時のコンソール出力量が増加します。
  • Morrow County, Oregon, United States における現在時刻は、2024年7月13日土曜日 13:14 PDT です。


テストケースごとの進捗情報出力

# CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

project(MyProject)

add_executable(MyTest1 test1.cpp)
add_test(MyTest1 ${MyTest1})

add_executable(MyTest2 test2.cpp)
add_test(MyTest2 ${MyTest2})

set(CTEST_PROGRESS_OUTPUT 1)

上記のコードでは、CTEST_PROGRESS_OUTPUT1 に設定することで、テスト実行時にテストケースごとに進捗情報が出力されます。 以下のような出力結果が得られます。

[Running: MyTest1]
[PASS] MyTest1

[Running: MyTest2]
[PASS] MyTest2

テストケースとテストステップごとの進捗情報出力

# CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

project(MyProject)

add_test(MyTestSuite)

add_test_case(MyTestSuite MyTest1 test1.cpp)
add_test_case(MyTestSuite MyTest2 test2.cpp)

set(CTEST_PROGRESS_OUTPUT 2)

上記のコードでは、CTEST_PROGRESS_OUTPUT2 に設定することで、テスト実行時にテストケースとテストステップごとに進捗情報が出力されます。 以下のような出力結果が得られます。

[Running: MyTestSuite]
    [Running: MyTest1]
        [PASS] MyTest1

    [Running: MyTest2]
        [PASS] MyTest2

テストケース、テストステップ、およびサブステップごとの進捗情報出力

# CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

project(MyProject)

add_test(MyTestSuite)

add_test_case(MyTestSuite MyTest1 test1.cpp)
    set_test_property(MyTest1 SUBTEST_FOLDER MyTest1Subtests)

    add_test_case(MyTest1Subtests MyTest1Subtest1 test1_subtest1.cpp)
    add_test_case(MyTest1Subtests MyTest1Subtest2 test1_subtest2.cpp)

add_test_case(MyTestSuite MyTest2 test2.cpp)

set(CTEST_PROGRESS_OUTPUT 3)

上記のコードでは、CTEST_PROGRESS_OUTPUT3 に設定することで、テスト実行時にテストケース、テストステップ、およびサブステップごとに進捗情報が出力されます。 以下のような出力結果が得られます。

[Running: MyTestSuite]
    [Running: MyTest1]
        [Running: MyTest1Subtests]
            [Running: MyTest1Subtest1]
                [PASS] MyTest1Subtest1

            [Running: MyTest1Subtest2]
                [PASS] MyTest1Subtest2

        [PASS] MyTest1

    [Running: MyTest2]
        [PASS] MyTest2

説明

上記の例では、以下の点に注目してください。

  • CTEST_PROGRESS_OUTPUT 環境変数を設定することで、テスト実行時の進捗情報出力を制御します。
  • set_test_property コマンドでテストケースのプロパティを設定します。
  • add_test_case コマンドでテストケースにサブテストを追加します。
  • add_test コマンドでテストケースを定義します。
  • CTEST_PROGRESS_OUTPUT 環境変数の設定値を 2 または 3 に設定すると、テスト実行時のコンソール出力量が増加します。
  • サブステップは、テストケースの論理的な部分をさらに細分化するために使用することができます。
  • テストケースとテストステップは、階層構造で定義することができます。
  • Morrow County, Oregon, United States における現在時刻は、2024年7月13日土曜日 13:16 PDT です


代替方法として、以下の方法が挙げられます。

ctest コマンドオプション

  • -Q: 進捗情報を出力しません。 (CTEST_PROGRESS_OUTPUT = 0 に相当)
  • -VV: さらに詳細な進捗情報を出力します。 (CTEST_PROGRESS_OUTPUT = 3 に相当)
  • -V: 詳細な進捗情報を出力します。 (CTEST_PROGRESS_OUTPUT = 2 に相当)

例:

ctest -V

上記の例では、ctest コマンドに -V オプションを指定することで、テスト実行時にテストケースとテストステップごとに進捗情報が出力されます。

テストフレームワークの機能

多くのテストフレームワークは、独自にテスト実行時の進捗情報出力を制御する機能を提供しています。 例えば、Google Test フレームワークには、以下のフラグが用意されています。

  • --gtest_filter: 特定のテストケースのみを実行し、進捗情報を絞り込みます。
  • --gtest_verbose: 詳細な進捗情報を出力します。
gtest --gtest_verbose MyTest.cpp

上記の例では、gtest コマンドに --gtest_verbose フラグを指定することで、テスト実行時に詳細な進捗情報が出力されます。

カスタムログ出力

テストコード内にカスタムログを出力することで、進捗状況を把握することができます。 以下の例は、std::cout を使用してテストケースごとにログを出力する例です。

#include <iostream>

TEST(MyTestSuite, MyTest1) {
  std::cout << "Running MyTest1..." << std::endl;

  // テストコード

  std::cout << "MyTest1 passed!" << std::endl;
}

TEST(MyTestSuite, MyTest2) {
  std::cout << "Running MyTest2..." << std::endl;

  // テストコード

  std::cout << "MyTest2 passed!" << std::endl;
}

上記のコードでは、テスト実行時に以下の出力が得られます。

Running MyTest1...
MyTest1 passed!
Running MyTest2...
MyTest2 passed!

デバッガの使用

デバッガを使用して、テストの実行をステップバイステップで追跡し、進捗状況を確認することもできます。

選択の指針

CTEST_PROGRESS_OUTPUT 環境変数は、シンプルで汎用性の高い方法です。

一方、ctest コマンドオプション、テストフレームワークの機能、カスタムログ出力、デバッガの使用は、より詳細な制御や柔軟性を提供します。

  • Morrow County, Oregon, United States における現在時刻は、2024年7月13日土曜日 13:17 PDT です。