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_OUTPUT
を 2 に設定することで、テスト実行中にテストケースとテストステップごとに進捗情報が表示されます。
プログラミングでの活用
CTEST_PROGRESS_OUTPUT
は、テスト実行の進捗状況を把握するのに役立ちます。 テスト実行時に詳細な進捗情報が必要な場合は、CTEST_PROGRESS_OUTPUT
を 2 または 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_OUTPUT
を 1 に設定することで、テスト実行時にテストケースごとに進捗情報が出力されます。 以下のような出力結果が得られます。
[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_OUTPUT
を 2 に設定することで、テスト実行時にテストケースとテストステップごとに進捗情報が出力されます。 以下のような出力結果が得られます。
[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_OUTPUT
を 3 に設定することで、テスト実行時にテストケース、テストステップ、およびサブステップごとに進捗情報が出力されます。 以下のような出力結果が得られます。
[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 です。