Google Test
Google Test と Google Mock は、強力なユニットテストツールのペアです。フレームワークは移植性があり、致命的および非致命的なアサーションが豊富に用意されていて、フィクスチャやテストグループ作成用のツールが提供されています。分かりやすいメッセージも表示され、結果は XML 形式でエクスポートできます。 おそらく唯一の欠点は、プロジェクト内で gtest/gmock をビルドする必要があることです。
Google Test の基本
Google Test に詳しくない場合は、以下でその主な概念の説明を参照してください。
アサーション
Google Test では、条件が真であるかどうかをチェックするステートメントは アサーション(英語)と呼ばれます。 致命的でないアサーションには、名前に EXPECT_ 接頭辞が含まれ、致命的な失敗を引き起こして実行を中止するアサーションには、 ASSERT_ で始まる名前が付けられます。 例:
Google Test で利用できるアサートのいくつかを以下に示します(この表では、 ASSERT_ が例として示されており、 EXPECT_ で切り替えることができます)。
論理 |
|
一般比較 |
|
浮動小数点比較 |
|
文字列比較 |
|
例外チェック |
|
また、Google Test は、 出力メッセージをより有益なものにするのに役立つ述語アサーション(英語)をサポートしています。 例: EXPECT_EQ(a, b) の代わりに、 a と b の同等性をチェックし、ブール結果を返す述語関数を使用できます。 失敗した場合、アサーションは関数の引数の値を出力します。
述語アサーションの例
bool IsEq(int a, int b){
if (a==b) return true;
else return false;
}
TEST(BasicChecks, TestEq) {
int a = 0;
int b = 1;
EXPECT_EQ(a, b);
EXPECT_PRED2(IsEq, a, b);
}
| 出力
Failure
Value of: b
Actual: 1
Expected: a
Which is: 0
Failure
IsEq(a, b) evaluates to false, where
a evaluates to 0
b evaluates to 1
|
上記の EXPECT_PRED2 では、 predN は N 個の引数を持つ述語関数です。 Google Test は現在、最大 5 つのアリティの述語アサーションをサポートしています。
フィクスチャ
共通のオブジェクトやサブルーチンを共有する Google のテストは、フィクスチャに分類できます。 一般化されたフィクスチャは次のようになります。
フィクスチャのために使用されるとき、テストがフィクスチャのメンバーと機能にアクセスすることを可能にするために TEST() マクロは TEST_F() と取り替えられるべきです:
Google Test の詳細については、フレームワークのリポジトリ内の サンプル(英語)を参照してください。 また、 値パラメーター化テスト(英語)や 型パラメーター化テスト(英語)などの他の注目すべき Google Test 機能の詳細については、 拡張オプション(英語)を参照してください。
Google Test をプロジェクトに追加する
公式 リポジトリ(英語)から GoogleTest をダウンロードし、 googletest-main のコンテンツをプロジェクトの空のフォルダー(たとえば、 Google_tests/lib )に抽出します。
または、Google Test を git サブモジュール(英語)として複製するか、 CMake を使用してダウンロードします(英語) (後者の場合、以下の手順は適用されません)。
CMakeLists.txt ファイルを Google_tests フォルダー内に作成します。プロジェクトツリーで右クリックして を選択してください。
次の行をカスタマイズして、スクリプトに追加します。
# 'Google_test' is the subproject name project(Google_tests) # 'lib' is the folder with Google Test sources add_subdirectory(lib) include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) # 'Google_Tests_run' is the target name # 'test1.cpp test2.cpp' are source files with tests add_executable(Google_Tests_run test1.cpp test2.cpp) target_link_libraries(Google_Tests_run gtest gtest_main)ルート CMakeLists.txt スクリプトで、
add_subdirectory(Google_tests)コマンドを最後に追加し、プロジェクトを再ロードします。
テストを作成するときは、必ず .cpp ファイルの最初にテストコードとともに #include "gtest/gtest.h" を追加してください。
Google Test の実行 / デバッグ構成
Google Test は main() エントリを提供し、通常のアプリケーションとしてテストを実行できますが、専用の Google Test 実行 / デバッグ構成を使用することをお勧めします。 これにはテスト関連の設定が含まれており、テストを通常のプログラムとして実行する場合は使用できない組み込みの テストランナーの利点を活用できます。
Google Test 構成を作成するには、メインメニューの 実行 | 実行構成の編集 に移動し、
をクリックして、テンプレートのリストから Google Test を選択します。
構成に含めるテストまたはスイートを指定するか、テスト名をフィルタリングするためのパターンを提供します。 フィールドに自動補完機能が用意されているため、すぐに記入できます。

ワイルドカードを設定してテストパターンを指定します。例えば:

構成設定の他のフィールドでは、環境変数とコマンドラインオプションを設定できます。 例: プログラム引数 フィールドを使用して
--gtest_repeatフラグを渡し、Google Test を複数回実行します。
出力は次のようになります。
Repeating all tests (iteration 1) ... Repeating all tests (iteration 2) ... Repeating all tests (iteration 3) ...構成を保存すると、 実行
または デバッグ
の準備ができました。
テストの実行
CLion では、テスト実行/デバッグセッションを開始する方法が いくつかあります。そのひとつが、特別なガターアイコンを使う方法です。 これらのアイコンは、単一テストまたはスイート/フィクスチャ全体をすばやく実行またはデバッグするのに役立ちます:

ガターアイコンは、テスト結果(すでに利用可能な場合)も表示します: 成功 または失敗
。
ガターアイコンを使ってテスト/スイート/フィクスチャを実行すると、CLion は 一時的な Google Test 構成を作成し、構成リストではグレー表示されます。 一時構成を保存するには、 ダイアログでそれを選択し、 を押します。

結果を探る
テストを実行すると、テストランナーウィンドウに結果(およびプロセス)が表示されます。 このウィンドウには以下が含まれます。
これまでに実行されたテストの割合を示す 進捗バー
実行中のすべてのテストのステータスと期間を含む ツリービュー
テストの output ストリーム
ツールバー では、失敗した
テストの再実行、
のエクスポート、自動保存された以前の結果のオープン
、特定のテストを簡単に見つけるためのアルファベット順
や、どのテストが他より長く実行されたかを把握するための期間順
への並べ替えなどのオプションがあります。
テストツリーには、実行中のすべてのテストが 1 つずつ表示されます。 パラメーター化されたテストの場合、ツリーにもパラメーターが表示されます。 また、ツリーには無効なテスト(名前に DISABLED 接頭辞が付いているテスト)が含まれ、対応するアイコンでスキップされたものとしてマークされます。

実行時にテストをスキップする
実行時に評価される条件に基づいて、一部のテストをスキップするように構成できます。 これには、 GTEST_SKIP() マクロを使用します。
スキップするテストに条件ステートメントと GTEST_SKIP() マクロを追加します。
無視対象を表示 アイコンを使用して、スキップされたテストをテストランナーツリーで表示 / 非表示にします。
