GoogleTest は、テスト実行結果の視認性を高めるため、ターミナル出力に ANSI カラーコードを使用します。このドキュメントでは、出力行の見出し部 (角括弧で囲まれた部分) に適用される色を説明します。
GoogleTest の内部では、以下の 4 つの色が定義されています。
| 色 | 内部定義名 | ANSI コード | 用途 |
|---|---|---|---|
| デフォルト (無色) | kDefault |
\033[0m |
色のリセット |
| 緑 | kGreen |
\033[0;32m |
成功状態の表示 |
| 赤 | kRed |
\033[0;31m |
失敗状態の表示 |
| 黄 | kYellow |
\033[0;33m |
スキップ、警告の表示 |
テスト実行中に表示される見出し行と、それぞれに適用される色を以下に示します。
| 見出し | 色 | 意味 |
|---|---|---|
[==========] |
緑 | テスト全体の開始・終了 |
[----------] |
緑 | テストスイートの開始・終了 |
[ RUN ] |
緑 | 個別テストの開始 |
| 見出し | 色 | 意味 |
|---|---|---|
[ OK ] |
緑 | 個別テストの成功 |
[ PASSED ] |
緑 | テスト全体の成功サマリ |
[ FAILED ] |
赤 | 個別テストの失敗、または失敗サマリ |
[ SKIPPED ] |
黄 | テストのスキップ (GTEST_SKIP 使用時) |
| 見出し | 色 | 意味 |
|---|---|---|
[ DEATH ] |
黄 | Death test 実行中 |
[ INFO ] |
黄 | 情報メッセージ |
以下は、典型的なテスト実行結果の出力例です。
[==========] Running 3 tests from 2 test suites. <- 緑
[----------] Global test environment set-up. <- 緑
[----------] 2 tests from FooTest <- 緑
[ RUN ] FooTest.DoesAbc <- 緑
[ OK ] FooTest.DoesAbc (0 ms) <- 緑
[ RUN ] FooTest.HasXyzProperty <- 緑
[ FAILED ] FooTest.HasXyzProperty (1 ms) <- 赤
[----------] 2 tests from FooTest (1 ms total) <- 緑
[----------] 1 test from BarTest <- 緑
[ RUN ] BarTest.SkippedOnCondition <- 緑
[ SKIPPED ] BarTest.SkippedOnCondition (0 ms) <- 黄
[----------] 1 test from BarTest (0 ms total) <- 緑
[----------] Global test environment tear-down <- 緑
[==========] 3 tests from 2 test suites ran. (2 ms) <- 緑
[ PASSED ] 1 test. <- 緑
[ SKIPPED ] 1 test, listed below: <- 黄
[ SKIPPED ] BarTest.SkippedOnCondition <- 黄
[ FAILED ] 1 test, listed below: <- 赤
[ FAILED ] FooTest.HasXyzProperty <- 赤
1 FAILED TEST
色の有効・無効は、以下の方法で制御できます。
./test_binary --gtest_color=yes # 常に色を使用
./test_binary --gtest_color=no # 色を使用しない
./test_binary --gtest_color=auto # 自動判定 (デフォルト)export GTEST_COLOR=1 # 色を有効化
export GTEST_COLOR=0 # 色を無効化--gtest_color=auto (デフォルト) の場合、以下の条件をすべて満たすときに色が有効になります。
TERM が xterm または xterm-color に設定されている着色は gtest.cc 内の PrettyUnitTestResultPrinter クラスで実装されています。主要なメソッドを以下に示します。
| メソッド | 出力する見出し |
|---|---|
OnTestProgramStart |
[==========] (緑) |
OnTestSuiteStart |
[----------] (緑) |
OnTestStart |
[ RUN ] (緑) |
OnTestEnd |
[ OK ] (緑) または [ FAILED ] (赤) または [ SKIPPED ] (黄) |
OnTestProgramEnd |
[ PASSED ] (緑)、[ FAILED ] (赤) |
Windows 環境などでエスケープシーケンスなしの出力に色を付けるフィルタースクリプトについて説明します。
test.exe | python add_gtest_color.pyこのフィルターは、見出し部 (角括弧で囲まれた部分) のみに色を付け、本文はそのまま出力します。
テキストベースのフィルターは、元の GoogleTest の着色と ほぼ完全に可逆 です。ただし、以下の制約があります。
標準的なテスト実行で出力されるすべての見出しは、テキストパターンから一意に色を復元できます。
| 見出しテキスト | 色 | 可逆性 |
|---|---|---|
[ RUN ] |
緑 | ✅ 完全 |
[ OK ] |
緑 | ✅ 完全 |
[ PASSED ] |
緑 | ✅ 完全 |
[ FAILED ] |
赤 | ✅ 完全 |
[ SKIPPED ] |
黄 | ✅ 完全 |
[==========] |
緑 | ✅ 完全 |
[----------] |
緑 | ✅ 完全 |
元の GoogleTest ソースコード (gtest.cc) では、PrettyUnitTestResultPrinter クラスが以下のように着色を行っています。
// OnTestStart - テスト開始時
ColoredPrintf(GTestColor::kGreen, "[ RUN ]");
// OnTestEnd - テスト終了時
if (result.Skipped()) {
ColoredPrintf(GTestColor::kYellow, "[ SKIPPED ]");
} else if (result.Passed()) {
ColoredPrintf(GTestColor::kGreen, "[ OK ]");
} else {
ColoredPrintf(GTestColor::kRed, "[ FAILED ]");
}この実装から、見出し文字列と色は 1 対 1 で対応しており、テキストから色を一意に復元できます。
以下のケースでは、フィルターが対応できない可能性があります。
カスタム TestEventListener の出力: ユーザーが独自の Listener を実装し、標準と異なる見出しを使用した場合
将来の GoogleTest バージョン: 新しい見出しが追加された場合は、フィルターの更新が必要
サードパーティツールの出力: GoogleTest 互換のフォーマットでも、微妙に異なるスペーシングを使用している場合
フィルターの正確性を確認するには、以下のコマンドで元の出力と比較できます。
./test.exe --gtest_color=yes > colored.txt
./test.exe --gtest_color=no | python add_gtest_color.py > filtered.txt
diff colored.txt filtered.txt