テストの実行中、C++test はテスト コンフィギュレーションの実行タブで定義された条件に基づいて、生成されたテストとユーザー定義テストを実行します (または実行時のカバレッジ監視が有効な状態でアプ リケーションを実行します)。
[実行] タブには以下の設定があります。
- テスト実行を有効にする: 単体テストを実行するか、または実行時のカバレッジ監視を有効 にしてアプリケーションを実行するかを指定します。このオプションをオフにすると、すべ てのテスト実行パラメーターが使用できなくなります。
[全般] タブ
- 実行モード > アプリケーション検証: インストゥルメントしたアプリケーションの実行モジュールを用意して実行するよう C++test を設定します。たとえば「実行時エラー検出」で説明されている実行時エラー検出などの場合にこの実行モードを選択しま す。
- 実行モード > 単体テスト: 単体テストを実行するよう C++test を設定します。
- 実行の詳細 > インストゥルメント モード: 実行中にテスト ケース/ アプリケーションをイ ンストゥルメントするレベルを決定します。次の事前設定を利用できます。
- 完全: 完全なインストゥルメントを実行します。これには、カバレッジ、関 数スタブ、スタック トレースのレポート、private メンバーへのアクセス、 および main 関数の名前変更が該当します。これらのインストゥルメント オプションの詳細については下記の「カスタム インストゥルメント」の説明 を参照してください。
- 行カバレッジ計測とメモリ エラー検出: 完全なインストゥルメントを実行し ます。また、単体テストの実行中に実行時エラーを検出するためにテスト用 実行モジュールをインストゥルメントします。
- 行カバレッジ計測: 行カバレッジだけの完全なインストゥルメントを実行し ます。行ヒット カウントは無効です。
- カバレッジ計測なし (スタブあり): 部分的なインストゥルメントを実行します。インストゥルメントの対象は、 関数スタブ、スタック トレースのレポート、private メンバーへのアクセス、およ び main 関数の名前変更です。カバレッジは対象外です。
- カバレッジ計測なし (スタブなし): 部分的なインストゥルメントを実行します。インストゥルメントの対象は、 カバレッジ、スタック トレースのレポート、private メンバーへのアクセス、および main 関数の 名前変更です。関数スタブは対象外です。
- アプリケーションの完全監視: 実行時エラー検出とカバレッジの追跡の両方を有効にして完全なアプリケーションをインストゥルメントします。メモリ が限られる組込みデバイス上でテストを実行する場合、カバレッジとメモリ エラー チェックの両方を適用できないことがあります。そのような場合、次のいずれかのオプションを選択できます。
- アプリケーション カバレッジの監視: カバレッジの追跡を有効にして完全なアプリケーションをインストゥルメントします。
- アプリケーション メモリ エラー チェック: 実行時エラー検出とメモリの チェックを有効にして完全なアプリケーションをインストゥルメントします。
- インストゥルメントなし: インストゥルメントを実行しません。カバレッジ情報は追跡されず、関数スタブは使用されません。
- カスタム インストゥルメント: [編集] ボタンをクリックしてインストゥルメントのレベルをカスタマイズします。ドロップダウン リストから [カスタム インストゥ ルメント] を選択して設定を有効にします。
以下は、テスト対象ソース、追加のソース、およびテスト ケース ソースに対して有効/ 無効にできる [インストゥルメント機能] についての説明 です。
C/C++ コード カバレッジ : カバレッジ情報を追跡するかどうかを指定します。 インクルード ヘッダーのインライン関数のために、テスト ケー ス ソース (スタンドアロン テスト スイート) のカバレッジ情報が必要です。 C++test がカバレッジのためにテスト ケース関数をインストゥルメントすることはありません。
スタック トレースのレポート: スタック トレース コールバックをレポートするかどうかを指定します。オフの場合、レポートされるスタック トレースには、実行された行は表示されず、スタブ化されていない関数呼び出しも表示されません。
private メンバーにアクセス: テスト ケースで private メンバーを使用するかどうかを指定し ます。(たとえば、private 関数の呼び出し、オブジェクトを作成するための private コンストラクターの使用、テスト ケースの事前条件での private フィールドの設定、事後条件での private フィールドの値のチェック)
関数スタブ: セーフ定義スタブ (C++test が提供) およびユーザー定義スタブを単体テストで使用するかどうかを指定します。
main() 関数の名前を変更: main() 関数があるコードをテストするかどうかを指定します。 このオプションがオンの場合、C++test はインストゥルメント時にこの関数の名前を変更します。この処理が必要な理由は、 C++test にはテスト ケースを実行する独自の main() 関数があるからです。このオプションがオフであり、テスト対象のコード 中に main() 関数がある場合、main シンボルの複数定義によるエラーが、テスト用実行モジュールのリンク フェーズで発生します。 [アプリケーション検証] モードで作業する場合、このオプショ ンはオフにするべきです。
メモリ エラー チェック: 実行時エラー検出を有効にしてメモリ関連の問題を検出するかどうかを指定します。
- C/C++ コード カバレッジ メトリクスセクションでは、計測するカバレッジの種類を指定します。[行ヒット カウント] は、行ヒットの数を計測するかどうかを指定します。カバレッジ メトリクスの種類の詳細については、「カバレッジの種類」を参照してください。
- C++ テンプレートからのコード カバレッジ情報の収集を有効化するには、 [C++ テンプレートからのコード カバレッジを有効化] チェックボックスをオンにします。「C++test でのテンプレート関数のサポート」を参照してください。
[カバレッジの最適化 (アプリケーション検証のみ)] チェックボックスをオンにして、以下の表で説明する、特別な最適化されたカバレッジ モードを有効にします。
オプション 説明 カバレッジ インストゥルメント > サイズの最適化 できる限り少ない RAM を使用するよう、メトリクス データを格納するためにカバレッジ インストゥルメントによって使用されるメモリ バッファーが最適化されます。このオプションは、メモリが限られる組込みデバイスに適しています。 カバレッジ インストゥルメント > スピードの最適化 実行時のオーバーヘッドが最小になるよう、メトリクス データを格納するためにコード カバレッジ インストゥルメントによって使用されるメモリ バッファーが最適化されます。このオプションは、実行時オーバーヘッドの増加に弱いアプリケーションでカバ レッジを計測するのに適しています。 データ一貫性チェックを有効化する カバレッジ バッファーの破損を検出するアルゴリズムを有効にします。テスト対象アプリケーションの欠陥のある動作によってカバレッジ バッファーの破損が起こる可能性が高い場合はこのオプションを有効にしてください。なお、このオプションを有効にすると、実行時オーバーヘッドが増加します。 カバレッジ メモリ バッファーの初期化を有効化する コードのカバレッジ インストゥルメントによって使用されるメモリ バッファーを初期化します。プログラムが実行する前に、コンパイラがグローバル変数と静的変数を 0 に初期化しない場合、このオプションを有効にするべきです (変数の初期化は ISO C 規格によって要求されています)。[サイズの最適化] と [データの一貫性チェックを有効化する] が同時に有効である場合、この オプションは自動的に有効になり、ユーザーが無効にすることはできません。
列挙データの自動生成を有効化: 列挙型関連 API マクロが必要とする列挙データを収集するかどうかを指定します (詳細は「列挙値の処理」を参照)。
- 実行の詳細 > テスト実行フロー : 使用するテスト実行フローを選択します。選択肢は、ホスト ベースの単体テストのためのデフォルト フロー、テスト用実行モジュールをビルドするためのデフォルト フロー (たとえば実行なしのトライアル ビルドのため)、見つからない関数定義のためのスタブ生成のためのデフォルト フロー、およびカスタム フロー (たとえば組込みテストまたは他のクラス プラットフォーム テストのためのフロー) です。カスタム フローの定義の詳細については「テスト実行フローのカスタマイズ」を参照してください。
実行の詳細 > クイック実行モード: 「テスト用実行モジュールの副生成物が現行かどうか」、言い換えると、前回の実行から変更されたかどうか通常よりも低い厳密さで検証します。
ヒント: クイック実行モードはいつ使用するのか
クイック実行モードを使用すると、テスト用実行モジュールを準備するのにかかる時間を短縮することができます。テスト用実行モジュールの副生成物が現行かどうかの検証が通常より緩やかになるため、テストの準備フェーズがより早くなります。
クイック実行モードでは、次の項目は前回の実行から変更されていないと見なされます。
• コンパイラとリンカーのオプション
• ヘッダー ファイル
• スタブ構成
次のようにクイック実行モードを利用することを推奨します。
1.「通常の」テスト コンフィギュレーションを複製して「クイック実行モード」用のテストコンフィギュレーションを作成し、[クイック実行モード] チェックボックスをオンにします。
2.2 つのテスト コンフィギュレーションを次のように使用します。
• 夜間テストのためにサーバー マシンでテストを実行する場合、「通常の」テストコンフィギュレーションを使用します。
• 毎日の作業のために開発者のマシンでテストを実行する場合、「クイック実行モード」用のテスト コンフィギュレーションを使用します。
次の状況では、開発者マシンで「通常の」テスト コンフィギュレーションを実行する必要があります。
• プロジェクトのコンパイラ / リンカーのフラグが変更された。たとえば、新しいマクロ定義がコンパイラ オプションに追加された場合や、新しい外部ライブラリがリンカー フラグのリストに追加された場合。
• テスト対象ソース/ テスト スイート ソース/ スタブ ソースによってインクルードされるヘッダー ファイルが変更された。
• 新しいユーザー スタブがプロジェクトに追加された。
• スタブ定義がプロジェクトから削除された。
• カバレッジ データをレポートする必要がある。
「通常の」テスト コンフィギュレーションを使ってテスト用実行モジュールを再ビルドした後、「クイック実行モード」に戻ることができます。
- 単体テストの設定 > テスト スイート ファイルの場所のパターン : テストで実行するテストスイート ファイルの場所を指定します。複数の場所を指定するには、セミコロン (;) で区切って指定します。たとえば、テストのレベル別に異なるテストを使用する場合、あるいはホストとターゲットで異なるテストを使用する場合などです。
- 次の変数がサポートされています。括弧内は例であり、/MyProject/module1/src/MyClass.cpp がテスト対象ファイルであるものとします。
- ${source_name} - テスト対象ファイルの完全な名前 (MyClass.cpp)
- ${source_base_name} - 拡張子を含まない、テスト対象ファイルの名前 (MyClass)
- ${source_ext} - テスト対象ファイルの拡張子 (cpp)
- ${source_loc} - ワークスペースを起点とした、テスト対象ファイルの場所 (/MyProject/module1/src)
- ${source_loc_rel} - プロジェクトから相対の、テスト対象ファイルの場所 (module1/src)
- ${source_loc_rel:<path>} - <path> から相対の、テスト対象ファイルの場所 (<path>=/MyProject/module1 の場合、src)
${test_ext} - C++test 独自のテスト スイート ファイル拡張子 (.cpp)
プロジェクト ツリーでテスト スイートが利用可能でなければなりません。
- 次の変数がサポートされています。括弧内は例であり、/MyProject/module1/src/MyClass.cpp がテスト対象ファイルであるものとします。
- 単体テストの設定 > テスト対象コンテキストごとにテスト用実行モジュールを作成する: テスト対象のコンテキスト (たとえばファイルなど) ごとに、個別のテスト用実行モジュールを使用するかどうかを指定します。
- このオプションをオンにした場合、C++test はソース ファイルごとに個別のテスト用実行モジュールを作成します。ただし、[シンボル] タブで定義されているようにプロジェクト ソースおよびスタブを使用します。CPPTEST_CONTEXT が設定されていないすべてのテストのために、個別にテスト用実行モジュールが準備されて実行されます。テスト用実行モジュールのサイズを小さくしたい場合、このオプションをオンにしてください。
- このオプションをオフにし、プロジェクト全体を選択して単体テストを実行した場合、すべてのソース ファイルを含む 1 つの大きなテスト用実行モジュールがビルドされて 1 回実行されます。
[シンボル] タブ
ライブラリ シンボル識別モード:
テスト用実行モジュールを準備するときに、(たとえば関数やグローバル変数のための) オリジナル シンボル定義のリストをどのように作成するかを指定します。
- オフ: C++test はシンボル定義を探しません。必要なすべてのシンボルがリンクフェーズで取得できるものと推測します。
- 自動: C++test は、リンク時に使用されるはずのオリジナル シンボル定義のリストを自動的に作成しようとします。
シンボルのソース
- プロジェクト内の他のファイルのシンボルを使用: テスト対象ファイルのオリジナル定義を解決するために、デフォルトで使用されるプロジェクト ソース ファイルに加えて、C++test が使用するべきプロジェクト ソース ファイルを定義します。
- デフォルトでは、C++test はテスト対象のファイル (テスト対象のプロジェクトファイル) とテスト スイートを次のように算出します。
- 選択されたテスト スイートの中から、[実行] タブの [全般] タブの [テスト スイート ファイルの場所のパターン] 条件に一致するすべてのテスト スイートを実行します。テスト スイート ファイルが CPPTEST_CONTEXT あるいは CPPTEST_INCLUDED_TO マクロを使用している場合、適切なソース ファイルおよびヘッダー ファイルがテスト対象になります。
- 選択されたすべてのプロジェクト ソース ファイルおよびヘッダー ファイルがテスト対象になります。さらに C++test は [テスト スイート ファイルの場所のパターン] で指定の場所において、CPPTEST_CONTEXT がテスト対象ファイルにセットされたテスト スイート ファイルを探します。
- 発見されたテスト スイート ファイルも実行されます。
${project_loc}
はプロジェクトの場所${resource_loc}
は、特定のプロジェクト リソースへの絶対パスです。
- プロジェクト ファイルの特定サブセットのシンボルを使用するには、そのサブセットを入力します。たとえば:
${project_loc}/src/core/*
- すべてのプロジェクト ソースを使用するテスト用実行モジュールをビルドするには、1 個のアスタリスク(*) を入力します。 テスト中にプロジェクトのすべてのシンボル定義が利用可能になります。
- ある 1 つのファイルが、テスト対象プロジェクトの他のソースで定義されている関数を参照している場合、このファイルをこのオプションを指定せずにテストすると、未解決のシンボルが発生してリンカー エラーが起こることがあります。
- テスト対象のソースが他のファイルのシンボルを参照している場合、またはそのようなすべてのシンボルにスタブを用意していない場合、このオプションをオフにしないでください。
- デフォルトでは、C++test はテスト対象のファイル (テスト対象のプロジェクトファイル) とテスト スイートを次のように算出します。
- 次の場所で発見されたファイルのシンボルも使用: 現在のテストを実行するときに、C++test がセーフ定義スタブ、ユーザー定義スタブ、およびファクトリ関数定義を探す場所を指定します。セミコロン (;) で区切って複数の場所を指定できます。たとえば、異なるレベルのテストに異なるスタブを使用している場合やホストとターゲットのテストを実行したい場合などです。
- オブジェクト/ ライブラリ ファイルを無視する: 無視するライブラリとオブジェクトを指定します。たとえば、他と分離した環境でのファイルのテストを簡単にしたい場合などに、このオプションを使用します。コマンドライン オプションのパターンを、セミコロン (;) で区切って指定します。リンカー コマンドラインからのオプションだけが無視されます。標準ライブラリ、コンパイラ ライブラリ、およびプラグマを使ってインクルードされているものは無視されません。
自動生成スタブ
- 自動生成スタブ出力先: 自動生成スタブの保存先を指定します。自動生成スタブの詳細については「スタブの自動生成とカスタマイズ」 を参照してください。
- 動的スタブの設定: 動的スタブの設定モードを指定します。
- スタブ コールバックの有効化: 有効な場合、スタブ コールバック メカニズムを使用して動的スタブが設定されます。「スタブ コールバックの使用」を参照してください。このオプションはデフォルトでオンです。
オリジナルの関数への呼び出しを挿入 - 有効な場合、生成されたスタブはオリジナルの関数を呼び出します。「オリジナルの関数を呼び出すスタブの作成」を参照してください。このオプションはデフォルトでオフです。
- スタブ API の有効化 (非推奨) - スタブ API を使用して動的スタブを設定します。「スタブ API の有効化 (非推奨)」を参照してください。このオプションはデフォルトでオフです。
未解決シンボルが検出された場合は実行を中断する
このオプションをオンにすると、シンボル/ スタブの解析時に未解決シンボルが検出された場合、C++test は単体テストの実行を中断します。未解決のシンボルを解決する方法については 「未解決シンボルのリンカー エラーの解決」を参照してください。
[実行時] タブ
- テスト用実行モジュールの実行ディレクトリ: テスト用実行モジュールを実行するディレクトリを指定します。テスト ケース ソースまたはオリジナル コードで相対パスを使用している場合、C++test はこのディレクトリ中でファイルを探します。
- デバッガーでテストを実行する: デバッガーを使ってテストを実行するかどうかを指定します。詳細については「テスト実行中のデバッガーの使用」を参照してください。
- 単一テスト ケースのタイムアウト時間 ( ミリ秒): テスト ケースの実行のタイムアウト時間をミリ秒で指定します。
単体テストの実行の詳細をレポート: 実行されたテスト ケースから単体テストの実行の詳細をレポートするかどうかを指定します。これには、CPPTEST_REPORT マクロからレポートされる値も含まれます。
- タスクの詳細を含める: レポートされたタスク (たとえば例外、アサーションの失敗、結果) をテスト ケースの実行の詳細に含めるかどうかを指定します。
- 成功したアサーションの詳細を含める: チェックされたアサーションおよび成功したアサーションをテスト ケースの実行の詳細に含めるかどうかを指定します。- 未検証の結果をレポートする: テスト実行中に取得された事後条件をレポートするかどうかを指定します。このオプションがオフの場合、[テスト ケースの結果を自動的に検証する] オプションは使用できません。
- テスト ケースの結果を自動的に検証する: テスト ケースの実行中に取得した事後条件を自動的に「検証済み」にするかどうか ( アサーションに変換するかどうか) を指定します。詳細については「自動生成テスト ケースの検証と回帰テスト」を参照してください。
- 詳細テスト実行レポートを生成する: テスト実行の詳細レポートの生成を有効にします (「レポートの種類」を参照)。
- 次の詳細カバレッジ レポートを生成する: 選択されたカバレッジの詳細情報の収集を有効にします (カバレッジの種類については「カバレッジ情報の参照」を参照)。