このセクションでは、 C++test を使って自動生成テスト ケース、ユーザー定義テスト ケース、CppUnit テスト ケースを実行する方法について説明します。
このセクションの内容 :
C++test は、あらゆる有効な C++testテスト ケースおよびレガシーCppUnit テスト ケースを実行してカバレッジ情報をレポートできます。
GCC -nostdinc オプションの処理 GCC
|
テスト ケースを実行するための一般的な手順は次のとおりです。
[ビルトイン] > [Unit Testing] > [Run Unit Tests] テスト コンフィギュレーション (またはこのテスト コンフィギュレーションを元にしたユーザー定義テスト コンフィギュレーション) を実行します。
ヒント - [テスト ケース エクスプローラー] ビューからのテスト実行 [テスト ケース エクスプローラー] ビューから直接テストを実行することができます (このビューを表示するには、[Parasoft] > [ビューの表示] > [テスト ケース エクスプローラー] をクリックします)。[テスト ケース エクスプローラー] ビューで、テストしたいリソース (プロジェクト、フォルダー、テスト スイート、テスト ケース) を選択して右クリックし、ショートカット メニューの [テスト履歴] または [テスト] からテスト コンフィギュレーションを実行します。 実行されたテストは、結果ステータスによって色分けされて表示されます。失敗したテストは赤で、成功したテストは緑で表示されます。 |
テンプレート関数のテスト C++test は、インスタンス化された関数テンプレートとインスタンス化されたクラス テンプレートのメンバーに対して静的解析と単体テストを実行できます。 詳細については 「C++test でのテンプレート関数のサポート」 を参照してください。 |
定期的にコマンドライン モードで回帰テストを実行するには、単純に [ビルトイン] > [Unit Testing] > [Run Unit Tests] テスト コンフィギュレーション (またはこのテスト コンフィギュレーションを元にしたユーザー定義テスト コンフィギュレーション) を実行するべきです。
たとえば:
cpptestcli -data /path/to/workspace -resource "ProjectToTest" -config team://ExecuteTests -publish
コマンドライン モード テストの詳細については 「コマンドライン インターフェイスからのテスト」 を参照してください。
C++test では、テストを実行せずにテスト用実行モジュールのトライアル ビルドを作成できます。トライアル ビルドにはテスト ケースとユーザー スタブが含まれます。この機能を利用して、自動生成スタブとテストがコンパイル可能かどうかをチェックできます。トライアル ビルドは、テスト対象のプロジェクトにテスト ケースがまだない場合でも可能です。
トライアル ビルドを実行する方法としては、[ビルトイン] > [Unit Testing] > [Build Test Executable] テスト コンフィギュレーションを実行することを推奨します。
[ビルトイン] > [Generate Stubs] テスト コンフィギュレーションの ( またはこのテスト コンフィギュレーションをベースにしたユーザー定義テスト コンフィギュレーション) を実行すると、見つからない関数定義と変数定義のためのカスタマイズ可能なスタブ (またはスタブ テンプレート) が自動的に生成されます。 「Executing Test Cases」の説明にもあるように、推奨する方法は、テスト ケースを実行する前に、まずテスト ケースを生成し、[Generate Stubs] テスト コンフィギュレーションを実行し、 [Build Test Executable] テスト コンフィギュレーションを実行することです。
スタブを生成するテスト コンフィギュレーションを使ってテストを実行すると、C++test は指定の場所にスタブ ファイルを作成します。完全なスタブ定義を自動生成できない場合は、スタブ テンプレートが作成され、ユーザーは return 文を入力したりインクルード ディレクティブを追加したりしてカスタマイズできます。完全なスタブとスタブ テンプレートは別々のファイルに保存されます。
自動生成スタブは、他にユーザー スタブもオリジナル スタブもない場合にだけ使用されます。
自動生成スタブとスタブ テンプレートはカスタマイズできます。詳細については 「スタブの追加と変更」を参照してください。スタブまたはスタブ テンプレートをカスタマイズした場合は、C++test がスタブ/スタブ テンプレートを認識するように解析を再度実行する必要があります。
スタブを生成するユーザー定義テスト コンフィギュレーションを作成するには、次の操作を行います。
デフォルトでは、C++test はテスト対象ファイル (テスト対象のプロジェクト ファイル) およびテスト スイートのリストを次の方法で算定します。
テスト対象ファイルのオリジナル定義を解決するために、他のプロジェクト ソース ファイルも使用したい場合、テスト コンフィギュレーションの [実行] > [シンボル] タブの [他のプロジェクト ファイルのシンボルを使用] オプションで設定できます。また、[次の場所で発見されたファイルのシンボルも使用] オプションを使って、使用するスタブを指定できます。[実行] > [全般] タブの [テスト対象コンテキストごとにテスト用実行モジュールを作成する] オプションを使って、コンテキスト ( 1 つのソース/ヘッダー ファイルまたはプロジェクト) ごとにテスト用実行モジュールを作成するかどうかを指定できます。
使用するプロジェクト ファイルとスタブの指定方法とテスト用実行モジュールの作成方法の詳細については、「[シンボル] タブ」 を参照してください。
テストによっては、他の関連するコンポーネントとは分けてコードの単体テストを実行したい場合があります。そのような場合、C++test ではスタブを使ってコードをテストできます。
1 つのファイルを分離してテストするには (異なる「テスト ベッド」でカスタム スタブと自動生成スタブを使ってテストするには)、次の操作を行います。
他と分けた状況で 1 つのファイルをテストする場合、特定のライブラリとオブジェクトをテストから外したいことがあります。テスト コンフィギュレーションの [実行] > [シンボル] タブの [オブジェクト/ライブラリ ファイルを無視する] フィールドで、コマンドライン オプションのパターンを、セミコロン (;) で区切って指定します。リンカー コマンドラインからのオプションだけが無視されます。標準ライブラリ、コンパイラ ライブラリ、およびプラグマを使ってインクルードされているライブラリは無視されません。
他から分離した状況で関数をテストする方法は色々あります。このセクションでは、セーフティ クリティカルなソース コードをテストするためによく使用される方法について説明します。この種のテストのための基本要件は、インストゥルメント モジュールがテスト対象ソース コードを変更してはならないことです。これは、実稼働環境での関数の実行をテスト結果が確実に反映するようにするためです。
テスト対象関数がインストゥルメントされないようにするには、テスト コンフィギュレーションでインストゥルメント設定を確認する必要があります。
[テスト 対象ソース] カテゴリで、以下の機能だけを有効にします。
以下のセクションでは、スタブ モードの設定、テスト スイート構成ごとのスタブ管理、および他から分離して関数をテストするためのテスト実行ファイルの設定について説明します。
テスト対象コードの関数スタブを使用するには、スタブのインストゥルメントを有効にしてスタブ モードを選択する必要があります。スタブのインストゥルメントを有効にすると、スタブ エンジンがアクティブ化されます。スタブ モードを選択することがスタブ呼び出しの適用方法を定義します。スタブ モードには以下の 2 種類があります。
以下の例で、スタブ関数またはメソッドの呼び出し方法で 2 つのモードがどのように異なるかを示します。
/* Original definition of function to be stubbed */ int Func(void) { // Function body } /* tested function definition */ int testedFunction(void) { int val = Func (); /* tested function body */ return val; } |
サンプル ソース コードをそれぞれのスタブ モードでインストゥルメントすると、以下の表のようになります。
関数呼び出しのインストゥルメント | スタブ化された関数のインストゥルメント | ||
---|---|---|---|
|
|
セーフティ クリティカルなコードをテストする場合、通常は“スタブ化された関数のインストゥルメント モード”が好まれます。なぜなら、このモードはテスト対象関数の本体を変更しないからです。スタブ モードを設定するには、以下の操作を行います。
この方法でインストゥルメント モードを設定すると、以下の制限事項が発生します。
以下のセクションでは、このような制限事項の対処方法について説明します。
単体テストの方針として、テスト スイートごとに異なるスタブ セットを使用しなければならない場合があります。これを実現するために、テスト スイートごとに専用のテスト コンフィギュレーションを用意するか、テスト スイートで直接スタブ ファイルを指定することができます。後者の方が望ましい方法です。
直接テスト スイート ファイルを変更して、GUI を使わずにテスト スイート固有のスタブ ファイルをテスト スイートに追加することもできます。テスト スイートにスタブ ファイルを追加するには、テキスト/コード エディターでテスト スイートを開き、各スタブ ファイルに以下のマクロを挿入します。ルート ディレクトリ パスを使って、特定の場所にあるすべてのスタブを含めることもできます。
CPPTEST_ADDITIONAL_STUB_FILES(<stub file path or root directory>); |
このマクロは、有効な C/C++ マクロの場所であればどこにでも指定できますが、 cpptest.h ヘッダー ファイルの後に追加しなければなりません。テスト スイート レベルで指定したすべてのスタブ ファイルは、テスト コンフィギュレーションの設定に影響を受けるスタブ ファイルの後に追加されます。
テスト ケースを選択して実行するには、次の操作を行います。
で、実行するテスト関数のノードを選択します。異なるテスト スイートからテスト ケースを選択して実行できます。
たとえば、選択した項目を右クリックして [Parasoft] ショートカット メニューから目的のテスト コンフィギュレーションを実行します。
注意 ! CDT 4.x CDT 4.x を使って作成されたマネージド C/C++ プロジェクトの場合、プロジェクト ツリーにテスト関数は表示されません。テスト ケースを実行するには、コード エディターでテスト ケース名を選択してください。 |
テスト対象のコードが参照しているシンボルを C++test が発見できない場合、リンカー エラーが起こることがあります。
リンカー エラーを早期発見するには、次の操作を行います。
未解決のシンボル (未定義の関数) がレポートされます。未解決のシンボルを参照するには、[コンソール] ビューで「次の 関数 の定義を発見できませんでした」 メッセージを探します。
C++test では、コンパイルとリンクの前に未解決のシンボル (未定義の関数) がレポートされます。未解決のシンボルを確認するには、次のいずれかの操作を行います。
未解決のシンボルを解決するには、次の方法があります。
外部ライブラリにシンボルがある場合、外部ライブラリをリンカー コマンドラインに追加してからテストを再度実行します。
詳細については 「プロジェクトの更新」 を参照してください。詳細については 「テスト実行中のデバッガーの使用」を参照してください。
前へ 次へ