このセクションでは、自動生成テスト ケースを参照する方法について説明します。
このセクションの内容 :
自動生成テスト ケースへのアクセス
自動生成テスト ケースはテスト スイート ファイルに保存されます。デフォルト設定では、C++test は1 つのファイルにつき 1 つのテスト スイートを生成します。設定を変えれば、1 つの関数につき 1 つのテスト スイートを生成することもできます。 詳細については 「[テスト スイート] タブ」および 「生成オプションのカスタマイズ」を参照してください。
自動生成されたテスト ケースを参照するには、次の操作を行います。
- [C/C++ プロジェクト] ビューで、生成されたテスト スイート ファイルを探します。
- デフォルトでは、自動生成テスト クラスはテスト対象プロジェクト内の tests/autogenerated ディレクトリに保存されます。
- テスト スイート ファイルの保存先を確認または変更するには、テストに使用したテスト コンフィギュレーションを開き、[生成] タブの [テスト スイート] タブの [テスト スイート出力ファイルとレイアウト] フィールドを参照します。詳細については 「[テスト スイート] タブ」 を参照してください。
- [C/C++ プロジェクト] ビューで、生成されたテスト クラスのノードをダブルクリックします。エディターが開き、テスト クラス ファイルが表示されます。
テスト ケースとは
テスト ケースはテスト スイート中に格納されます。
- テスト スイート は、テスト ケースのための一種のフレームワークであり、テスト ケースをグループ化するのに役立ちます。各テスト スイートは、CppTest_TestSuite クラスから派生した 1 つのクラス定義、テスト ケースの宣言、およびテスト ケース関数の定義を持ちます。
- C++ の関数またはクラス メソッドに対して生成されたテスト スイートは、クラスの形を取り、テスト ケースはこのクラスの public メソッドになります。テストされたメソッドがクラス メンバーである場合、テスト スイート クラスは、テスト対象メソッドが属するクラスへのフレンドになります。テスト ケース内からテスト対象クラスの private メンバーを制御できるため、この関係は非常に強力です。
- C コードのテスト スイートは、グローバル関数を宣言するための「コンテナー」(ファイル) としてだけ使用されます。
- テスト ケース は、テスト スイート クラスの public メソッド (C++ の場合) またはグローバル関数 ( C の場合) であり、次の 3 つのセクションを持ちます。
- 引数と事前条件の代入
- テストされる関数呼び出し
- 結果と事後条件の検証 C++test は結果を制御して検証するための一連のマクロを定義しています。これらのマクロは、テスト用実行モジュールから C++test GUI にメッセージとアサーションを渡すために使用できます。利用可能なマクロについては 「C++test API ドキュメント」 を参照してください。
テスト対象のファイルに後で関数を追加した場合、更新されたファイルにテスト生成が実行されて、新しいテスト ケースが元のテスト スイート ファイルに追加されます。
コンテキスト マクロとインクルード マクロ
各テスト スイートは、次の 2 つのマクロから開始します。
CPPTEST_CONTEXT:
テスト スイートがテストするファイルを指定します。1 つのソース ファイルだけを指定できます。コンテキストの指定がない場合、プロジェクトが実行されるたびにテスト スイートが実行されます。- テストの実行前にプロジェクト ツリーでソース ファイルまたはディレクトリを選択した場合、C++test はテスト コンフィギュレーションの [実行] > [全般] タブの [テスト スイート ファイルの場所のパターン] オプションで指定されたすべてのテスト ディレクトリをスキャンします。指定のコンテキストに一致するすべてのテスト スイートが実行されます。
- プロジェクト全体を選択した場合、テスト パス上のすべてのテスト スイートが実行されます。
- 1 つのテスト スイートまたは 1 つのテストを選択した場合、CPPTEST_CONTEXT マクロは、このテスト スイートが関連するソース ファイルをバックトレースするために使用されます。選択したテスト スイートだけが実行されます。
CPPTEST_TEST_SUITE_INCLUDED_TO:
このテスト スイートがインクルード テスト スイートであることを指定するほか、テスト用実行モジュールをビルドするときにこのテスト スイート ソースをインクルードするファイルを指定します。他のテスト スイート ファイルをインクルードする場合は #include ディレクティブを使用します。
これらのマクロで指定するファイルは、テスト対象ファイルのファイル名と一致しなければなりません。テスト対象ファイルのファイル名を変更した場合、マクロ側のファイル名も合わせて変更する必要があります。
これらのマクロでは相対パスを使用できます。相対パスは "./" または "../" で開始しなければなりません。
事後条件マクロ
次の事後条件マクロは、テストの実行中に変数またはクラス メンバーが保持した値をレポートするために使用されます。
- CPPTEST_POST_CONDITION_BOOL(value_string, value)
- CPPTEST_POST_CONDITION_INTEGER(value_string, value)
- CPPTEST_POST_CONDITION_UINTEGER(value_string, value)
- CPPTEST_POST_CONDITION_FLOAT(value_string, value)
- CPPTEST_POST_CONDITION_CSTR(value_string, value)
- CPPTEST_POST_CONDITION_CSTR_N(value_string, value, max_size)
- CPPTEST_POST_CONDITION_MEM_BUFFER(value_string, value, size)
- CPPTEST_POST_CONDITION_PTR(value_string, value)
これらのマクロの結果 ( レポートされたすべてのアサーション値) は [品質タスク] ビューに表示されます。事後条件がレポートされたテスト ケースは、回帰テストで使用するために自動的に「検証済み」にできます。検証済みにすることによって、 *_POST_CONDITION_* マクロはアサーションに変換され、今後のテストで期待値 (検証済みの値) が出力されなかった場合、このアサーションは失敗します。この機能は特に、レガシー コードをベースにした回帰テストを自動生成するのに役立ちます。テスト ケースの検証の詳細については 「自動生成テスト ケースの検証と回帰テスト」を参照してください。
その他のマクロ
アサーション マクロは、ユーザーが事後条件を検証したときにテスト ケースに追加されます。
テストのニーズに合わせて他のマクロを追加することも可能です。テスト ケースで使用できるマクロの一覧については 「C++test API ドキュメント」を参照してください。
テスト関数
自動生成テスト ケースは、特別な関数を持つことがあります。たとえば、最大値や最小値にアクセスする関数などです。
C++test ランタイム ライブラリには、異なる数値を使ってテスト ケースを生成するために、整数型および浮動小数点型の最大値/最小値を返す関数が用意されています。次の表中のすべての関数はユーザー定義テスト ケースで使用できます。
関数 | 目的 |
---|---|
char cpptestLimitsGetMaxChar(void); | char 型の最大値を返します。 |
char cpptestLimitsGetMinChar(void); | char 型の最小値を返します。 |
signed char cpptestLimitsGetMaxSigned Char(void); | signed char 型の最大値を返します。 |
signed char cpptestLimitsGetMinSigned Char(void); | signed char 型の最小値を返します。 |
unsigned char cpptestLimitsGetMaxUnsigned Char(void); | unsigned char 型の最大値を返します。 |
short cpptestLimitsGetMaxShort(void); | short 型の最大値を返します。 |
short cpptestLimitsGetMinShort(void); | short 型の最小値を返します。 |
unsigned short cpptestLimitsGetMax UnsignedShort(void); | unsigned short 型の最大値を返します。 |
int cpptestLimitsGetMaxInt(void); | int 型の最大値を返します。 |
int cpptestLimitsGetMinInt(void); | int 型の最小値を返します。 |
unsigned int cpptestLimitsGetMaxUnsigned Int(void); | unsigned int 型の最大値を返します。 |
long cpptestLimitsGetMaxLong(void); | long 型の最大値を返します。 |
long cpptestLimitsGetMinLong(void); | long 型の最小値を返します。 |
unsigned long cpptestLimitsGetMaxUnsigned Long(void); | unsigned long 型の最大値を返します。 |
float cpptestLimitsGetMaxPosFloat(void); | float 型の正の最大値を返します。 |
float cpptestLimitsGetMinNegFloat(void); | float 型の負の最小値を返します。 |
float cpptestLimitsGetMaxNegFloat(void); | float 型の負の最大値を返します。 |
float cpptestLimitsGetMinPosFloat(void); | float 型の正の最小値を返します。 |
double cpptestLimitsGetMaxPosDouble(void); | double 型の正の最大値を返します。 |
double cpptestLimitsGetMinNegDouble(void); | double 型の負の最小値を返します。 |
double cpptestLimitsGetMaxNegDouble(void); | double 型の負の最大値を返します。 |
double cpptestLimitsGetMinPosDouble(void); | double 型の正の最小値を返します。 |
long double cpptestLimitsGetMaxPosLong Double(void); | long double 型の正の最大値を返します。 |
long double cpptestLimitsGetMinNegLong Double(void); | long double 型の負の最小値を返します。 |
long double cpptestLimitsGetMaxNegLong Double(void); | long double 型の負の最大値を返します。 |
long double cpptestLimitsGetMinPosLongDouble(void); | long double 型の正の最小値を返します。 |
自動生成スタブ
詳細については「スタブの追加と変更」 を参照してください。