このセクションの内容:
テスト ケースはテスト スイートに格納されるため、テスト ケースを追加するには先にテスト スイートを作成する必要があります。
空のテスト スイートを手動で追加することもできます。テスト ケース エクスプローラーでプロジェクトまたはフォルダーを右クリックし、[新規追加] > [テスト スイート] を選択します。
テスト ケースを含め、すべてのテスト スイート データは C++test Project ディレクトリのテスト スイート ファイルに格納されます。テスト スイート ファイルや C++test が生成する他のテスト成果物はソフトウェア構成管理システムで管理することを推奨します。
[追加のテスト スイート コード] エディターで、テスト スイートに追加される事前定義済みの挿入可能なコード セクションを設定します。
デフォルトでは、以下のコード セクションを設定できます。
- Additional Includes - 追加のインクルード ファイル
- TestSuiteSetUp - テスト スイートの setUp() 関数の定義 (ボディ)
- TestSuiteTearDown - テスト スイートの tearDown() 関数の定義 (ボディ)
- TestCaseSetUp - テスト ケースの setUp() 関数の定義 (ボディ)
- TestCaseTearDown - テスト ケースの tearDown() 関数の定義 (ボディ)
以下の開始/終了マーカーを使用してテスト スイートに他のコード セクションを追加できます。
/* CPPTEST_TEST_SUITE_CODE_BEGIN CodeSectionIdentifier */
/* CPPTEST_TEST_SUITE_CODE_END CodeSectionIdentifier */
設定するコード セクションの名前 (識別子) がユニークであることを確認してください。 |
たとえば、テスト スイートに以下のマーカーを追加したとします。
/* CPPTEST_TEST_SUITE_CODE_BEGIN NewIncludes2 */ //This is a user-configured code section. /* CPPTEST_TEST_SUITE_CODE_END NewIncludes2 */ |
すると、ドロップダウン メニューに新規コード セクションが表示されます。
更新したテスト スイートを実行する準備ができました。
新しいテスト ケースがテスト ケース エクスプローラーに表示され、実行することができます。テスト ケースの実行方法については 「テスト ケースの実行」 を参照してください。
デフォルト テスト ケースは、選択された関数の標準的なテスト ケースを表します。デフォルト テスト ケースには以下のステップがあり、テスト ケースを実行すると、以下で説明する順序でステップが実行されます。
テスト ケースの構造をカスタマイズすることもできます。「ステップの設定」を参照してください。
テスト ケース エディターで編集できるのは、テスト ケース エディターを使って作成したテスト ケースだけです ( 「テスト ケースを作成する」を参照)。自動生成テスト ケース (「テスト ケースの自動生成」 を参照)、コード エディターで作成したテスト ケース、およびテスト ケース ウィザードで作成したテスト ケース (「 グラフィカルなテスト ケース ウィザードによるテスト スイートとテスト ケースの追加」を参照) はテスト ケース エディターで編集できません。
テスト ケース エディターは、テスト ケースを一連のステップで表します。実行中、テスト ケース エディターで定義されている順番に、上から下にステップが実行されます。さまざまなステップを、特定の機能を実装するテスト ケース エディターで利用できます。
利用できるステップの詳細については 「「テスト ケース」ステップのリファレンス」 を参照してください。
デフォルト テスト ケースは利用できるステップのサブセットだけを使用します (「デフォルト テスト ケース」 を参照)。必要に応じて、好きな順序でさまざまなステップを設定してテスト ケース フローを定義することで、特定のシナリオを実装するようテスト ケースをカスタマイズできます。たとえば、一連の関数の「呼び出し」を実行する前に、さらにスタブ構成を実行できます。また、特定の入力/出力の値をレポートできます。
テスト ケース エディターで、ステップの [-] ボタンをクリックします。テスト ケースからそのステップが削除されます。
テスト ケース エディターで、ステップのハンドル (4 方向の矢印) をクリックしてステップをドラッグ アンド ドロップします。
テスト ケース エディターで、Ctrl キーを押しながらステップのハンドル (4 方向の矢印) をクリックし、ドラッグ アンド ドロップします。
特定のテスト シナリオを実装して確実に矛盾のないランタイム環境にするために、スタブの振る舞いを設定しなければならない場合があります。動的スタブの機能を使って、スタブ構成を直接テスト ケース定義に置き、テスト ケースごとに固有のスタブ構成を持たせることができます。スタブ コールバック フレームワーク (詳細は「スタブ コールバックの使用」を参照) を使用してテスト ケースのソース コードを手動で変更するか、テスト ケース エディター インターフェイスを使用できます。テスト ケース エディターには、スタブ設定 -スタブ設定およびスタブ期待値 - のための専用のステップが用意されています。スタブの戻り値を設定したり、スタブ関数とオリジナル関数を切り替えたりといったスタブ設定を定義することができます。
テスト ケース エディターで定義されたステップは上から下の順序で実行されます。そのため、ステップが意図した順序で設定されているかを確認することが重要です。
以前のバージョンの C++test で利用可能だったスタブ ステップは非推奨になりました。このステップの設定に関する情報は「非推奨のスタブ ステップ設定アクション」に移動されました。 |
スタブ設定ステップでは、スタブ コールバック フレームワークを使用してスタブの振る舞いを設定できます。
スタブ コールバックを使用するには、スタブ ビュー (「 [スタブ] ビューでのスタブの参照」を参照) またはテスト コンフィギュレーション (「[実行] タブ - テストの実行方法を定義する」を参照) で直接 [スタブ コールバックの有効化] オプションをオンにする必要があります。 |
テーブル – (デフォルト) パラメーターを指定するための設定テーブルを開きます。
コード – スタブの振る舞いをスクリプトで記述するためのコード エディターを開きます。
テーブル モードでは、テスト ケース実行時に実行されるアクションを定義できます。アクションは、個別のテーブル行として設定され、上から下へ実行されます。
[アクション] 列でドロップダウン メニューからアクション タイプを選択します。
[P1] から [P4 ] 列に必要なパラメーターを入力します。アクション タイプを選択したときに自動的に表示される候補に従って入力できます。
以下のアクション タイプを使用できます。
呼び出し固有のパラメーターを定義することで、1 つのスタブの個々の呼び出しに対してスタブの振る舞いを指定できます。呼び出し固有のパラメーターは、波括弧の中にカンマで区切ったパラメーターのリストとして指定します。
パラメーターの最後に省略記号 (…) を追加すると、何回目のスタブ呼び出しでもアクションが実行されるよう設定できます。結果として、明示的に指定された最後の値が残りのすべてのスタブ呼び出しで使用されます。
次の例では、値 2 と 37 が初回と 2 回目のスタブ呼び出しで使用され、値 14 が 3 回目の呼び出しと、その後のすべてのスタブ呼び出しで使用されます。
1 つのスタブ アクションが複数の呼び出し固有パラメーターのセットを使用してパラメータライズされている場合、どのセットも同じ数の値を持つ必要があります。次の例では、どの呼び出し固有パラメーターのセットにも 2 つの値があります。
パラメーター値は、特定のコンテキストにふさわしい任意の値を使用できます。例:
コード モードでは、スタブの振る舞いを設定するコード スニペットを指定できます。
アサーションを含め、すべての C++test API を使用してスタブの振る舞いをコードで設定できます。
stubCallInfo->callNo
を使用し、呼び出し固有の値を指定することで、スタブの個々の呼び出しに対する振る舞いを指定できます。下の例は、以下のようにスタブを設定しています。
スタブ期待値ステップでは、スタブ関数呼び出しに対して以下の期待値を設定できます。
スタブ期待値ステップを設定するには、次の操作を行います。
[Expect Call Sequence] アクションを使用すると、指定されたスタブ関数が意図した順序で実行されているかを確認するのに役立ちます。
複数の SET VALUE アクションが指定されている場合、上から順に処理されます。同じパラメーターに対して複数のアクションが設定されている場合、最後のアクションが有効になります。 |
テスト シナリオで、事前条件と事後条件に異なる値を使って同じテストを実行する必要がある場合、「パラメーター」ステップを利用できます。ビルトインのテーブルまたは CSV ファイルなどの外部データ ソースで任意の変数セットを定義できます。各変数が表の 1 列であり、ヘッダー行で固有のユーザー定義名を指定できます。パラメータライズされたテスト ケースが値の行ごとに個別に実行されます。
以下のいずれかの方法でテスト ケースをパラメータライズできます。
「パラメーター」ステップで定義された変数は、さまざまなステップで使用できます。 例:
他のステップは、パラメーター API を使って変数にアクセスすることができます。以下のデータ ソース マクロがあります。
CPPTEST_DS_GET_BOOL("<column name with bool values>")
CPPTEST_DS_GET_CSTR("<column name with string values>")
CPPTEST_DS_GET_FLOAT("<column name with float values>")
CPPTEST_DS_GET_INTEGER("<column name with integer values>")
CPPTEST_DS_GET_CHAR ("<column name with char values>")
CPPTEST_DS_GET_UINTEGER("<column name with unsigned integer values>")
CPPTEST_DS_GET_MEM_BUFFER ("<column name with buffer data>", "<size of data>")
CPPTEST_DS_GET_ENUM ("<enum type name>", "<column name with enum values>")
「パラメーター API」ステップにアクセスするには、アクセスしたいフィールドで Ctrl キーを押しながらスペース キーを押します。
パラメーター ステップでは、単純型の値だけがサポートされています。
次の例は、processValue(int) のパラメータライズド テスト ケースを表しています。ビルトインのテーブルで指定された値が、データ ソース マクロおよび列名を使用して、変数、スタブ設定、アサーション ステップに適用されています。
パラメーター ステップの設定には以下のオプションがあります。
すでに追加されているデータ ソースの値でテスト ケースをパラメータライズするには、次の操作を行います。
CPPTEST_DS_GET_INTEGER を表します。
CPPTEST_DS_GET_FLOAT を表します。
CPPTEST_DS_GET_CSTR を表します。
CPPTEST_DS_GET_CHAR を表します。
CPPTEST_DS_GET_BOOL を表します。
CPPTEST_DS_GET_UINTEGER を表します。
CPPTEST_DS_GET_MEM_BUFFER を表します。
CPPTEST_DS_GET_ENUM を表します。
{CONTEXT}#{TYPE}#{VARIABLE
} です (「例」を参照)。テスト ケースの値をレポートするには、「レポート」ステップを使用します。「レポート」ステップには型の値を出力するレポート関数が用意されています (たとえば CPPTEST_REPORT_INTEGER() や CPPTEST_REPORT_FLOAT()
など)。レポート関数は [型] ドロップダウン リストに表示されます。レポート関数を選択すると、必須パラメーターが [P1] から [P3] 列に表示されます。
別の方法として、「メッセージ」ステップを使って実行中に単純なテキスト メッセージを出力することもできます。追跡可能な識別子の出力やデバッグの目的で、「メッセージ」ステップを利用できます。
「レポート」および「メッセージ」ステップの出力はコンソールに表示されます。これらの出力は単体テスト レポートに含めることもできます。
「コード」ステップを使ってテスト ケースに複雑なロジックを追加できます。「コード」ステップでは C/C++ のカスタム コードを実装します。カスタム コードは、テスト ケース定義の任意の場所に置くことができますが、上から下の順序で実行されるため、どこにステップを置くかが重要です。
「コード」ステップでは、それより前の 「変数」 ステップで定義された変数を使用できます。「コード」ステップで導入された変数は、その後のステップで再利用できます。
テスト ケース エディターは、「コード」ステップに入力されたカスタム コードの正しさを検証しません。構文エラーはテスト ケースの実行中にレポートされます。
テスト ケース エディターには以下のステップが用意されています。テスト ケースを定義するときにこれらのステップを基本構成要素として使用できます。
アサーションは、期待値に対して実際の値を検証します。通常、出力値 (事後条件) をチェックするために使用されます。
利用できるアサーションの型をドロップダウン リストから選択できます。サポートされるアサーションの型については 「テスト ケース検証マクロ」を参照してください。
利用できるパラメーターは、アサーションの型によって異なります。パラメーター フィールドを選択して Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
<Type>([<P1>, <P2>, <P3>, <P4>]);
「呼び出し」ステップを使用して、テスト対象関数を呼び出すことができます。1 つのテスト ケースで複数の「呼び出し」ステップを使用して、呼び出しシーケンスを定義できます。テスト ケース エディターは、入力された呼び出しパラメーターの正しさは検証しません。
[リターン] フィールドは、戻り値を格納するための変数です。戻り値が必要ない場合は空白のままにします。Ctrl キーを押しながらスペース キーを押すと、既知の型のリストが表示されます。
[名前] フィールドは関数名です。メンバー関数の場合、[名前] フィールドにはオブジェクト変数 (object.mFunction または object->mFunction) も含めるべきです。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
カンマで区切ったパラメーター リストを入力できます。有効な任意の C/C++ パラメーター (定数、変数、式など) が入力可能です。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
[<Return> =] <Name>(<Parameters>);
「コード」フィールドでは、テスト ケースの実行時に実行される C/C++ のカスタム コードを入力できます。「コード」ステップでは、それより前のステップですでに定義されているシンボルを使用できます。「コード」ステップで導入された変数は、その後のステップで使用できます。なお、テスト ケース エディターは、入力されたコードの正しさは検証しません。
<Code>
「グローバル」は、テスト スイートに固有の変数定義、初期化、および代入を指定します。グローバル変数はテスト ケースで使用できます。「グローバル」は、テスト スイート エディターでだけ使用できます。
[型] フィールドにはグローバル変数の型を入力します (必須です)。Ctrl キーを押しながらスペース キーを押すと、既知の型が表示されます。
[名前] フィールドにはグローバル変数の名前を入力します (必須です)。同じ名前で複数の変数を定義した場合は警告がレポートされます。
[値]フィールドには、変数に代入する初期値を入力します。有効な任意の C/C++ 初期化子 (定数、式など) を入力できます。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
<Type> <Name> [= <Value>];
「メッセージ」ステップには、単純なテキスト メッセージを入力します。このメッセージは、 CPPTEST_REPORT() を使ってテストの実行中に出力されます。「メッセージ」ステップは、トレーサビリティやデバッグのために役立ちます。メッセージはそのまま出力されます (変数や式は使用できません)。また、すべての引用符がエスケープされます。
CPPTEST_REPORT(“<Message>”);
「パラメーター」は、テスト パラメーターを設定するためのステップです。テスト ケースは行ごとに単独で実行されます。「パラメーター」ステップは、1 つのテスト ケースで 1 つだけ使用できます。「パラメーター」ステップの値は、パラメーター API を使ってアクセスできます。パラメーター ステップには、ビルトイン (テーブル) モードとデータ ソース モードという 2 つのモードがあります。
、[ビルトイン (テーブル)] オプションを有効にすると、パラメーター エディターに直接値を入力できます。
このモードでは、各列 (A、B、C など) が変数を表し、各行がテスト ケースの実行中に使用されるデータの 1 次元配列を表します。
既存のデータ ソースを使用するには、[データ ソース] オプションを有効にしてデータ ソース名を入力します。スペース キーを押しながら Ctrl キーを押すと、利用できるデータ ソースの名前が表示されます。
データ ソース名を入力した後、以下の処理を実行できます。
データ ソース モードでは、行や列名なども含めて定義済みのデータ ソースが使用されます。[列名の更新] ボタンをクリックすると、既存のデータ ソースの列名が表示されます。[列名の更新] ボタンをクリックすると列名だけが表示されます。このモードでは、既存のデータ ソースの行は表示されません。
N/A
「レポート」ステップでは、テストの実行中にランタイム値を出力するメッセージを設定できます。「レポート」ステップは、入力/出力の値を出力したりデバッグしたりするために使用されます。
[型] ドロップダウン リストからレポートの型を選択します。サポートされるすべてのアサーションの一覧については、「テスト ケース検証マクロ」を参照してください。
利用できるプロパティはレポートの種類によって異なります。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
<Type>([<P1>, <P2>, <P3>]);
「スタブ」ステップでは、現在のテスト ケースのスタブ構成を設定します。「スタブ」ステップは、スタブ構成を使用する 「呼び出し」ステップよりも前に置かなければなりません。「スタブの振る舞いの設定」も参照してください。
[アクション] フィールドでは、スタブの振る舞いまたは期待されることを指定します。利用できるアクションがドロップダウン リストに表示されます。以下のアクションがサポートされます。
[テーブル] および [コード] ラジオ ボタンで、スタブの振る舞いを定義するのに使用する編集モードを選択します。
「スタブ期待値」ステップでは、スタブ呼び出しの期待される回数または順序を設定します。「スタブ期待値」ステップは、スタブ構成を使用する 「呼び出し」ステップよりも前に置かなければなりません。「スタブの振る舞いの設定」も参照してください。
[アクション] フィールドでは、期待値のタイプを指定します。利用できるタイプがドロップダウン リストに表示されます。以下のアクションがサポートされます。
[関数] フィールドでは、構成を適用するスタブ関数の関数識別子を指定します。EXPECT CALL SEQUENCE の場合、カンマで区切った関数識別子の呼び出しシーケンスを入力します。
関数識別子は、スタブを特定するために使用する文字列です。デフォルトでは、C++test が生成するスタブは以下のパターンの識別子を使用します。 [parent::]<function_name>
接頭辞 parent::
は、関数/メソッドがクラスまたは名前空間メンバーの場合にだけ追加されます。直接の親だけが追加されます。テンプレート クラス メソッドの場合、親の名前ではテンプレート パラメーターが省略されます。
C++test は、関数のすべてのオーバーロードに同じ関数識別子を使用します。必要に応じて、スタブ定義を変更して、オーバーロードされるスタブ関数ごとに固有の関数識別子を使用できます。そうすれば、オーバーロードされた関数/メソッドに対してスタブを区別することができます。
パラメーター フィールドでは、選択したアクション タイプのパラメーターを指定します。パラメーターはアクション タイプによって異なります。アクション タイプを選択したときに表示される候補に従って入力できます。
「スタブ」ステップでは、現在のテスト ケースのスタブ構成を設定します。「スタブ」ステップは、スタブ構成を使用する 「呼び出し」ステップよりも前に置かなければなりません。「スタブの振る舞いの設定」も参照してください。
[アクション] フィールドでは、スタブの振る舞いまたは期待されることを指定します。利用できるアクションがドロップダウン リストに表示されます。以下のアクションがサポートされます。
[関数] フィールドでは、構成を適用するスタブ関数の関数識別子を指定します。EXPECT CALL SEQUENCE の場合、カンマで区切った関数識別子の呼び出しシーケンスを入力します。
関数識別子は、スタブを特定するために使用する文字列です。デフォルトでは、C++test が生成するスタブは以下のパターンの識別子を使用します。 [parent::]<function_name>
接頭辞 parent::
は、関数/メソッドがクラスまたは名前空間メンバーの場合にだけ追加されます。直接の親だけが追加されます。テンプレート クラス メソッドの場合、親の名前ではテンプレート パラメーターが省略されます。
C++test は、関数のすべてのオーバーロードに同じ関数識別子を使用します。必要に応じて、スタブ定義を変更して、オーバーロードされるスタブ関数ごとに固有の関数識別子を使用できます。そうすれば、オーバーロードされた関数/メソッドに対してスタブを区別することができます。
利用できるパラメーターは、アクションの種類によって異なります。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリスト、パラメーター API、およびスタブ API が表示されます。
[条件] フィールドでは条件を指定できます。利用できる条件は、アクションの種類によって異なります。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリスト、パラメーター API、およびスタブ API が表示されます。
/* SET RETURN VALUE */ CPPTEST_ON_CALL("<Function>")[-><Condition>]->Arg("__return")->Assign()-><Parameters>; /* SET PARAMETERS */ CPPTEST_ON_CALL("<Function>")[-><Condition>]->Arg("<param1>")->Assign()-><value representation>->Arg("<param2">)->Assign()-><value representation>... /* CALL ORIGINAL */ CPPTEST_ON_CALL("<Function>")[-><Condition>]->Arg("__callOrig")->Assign()->Int(1); /* USE CUSTOM ACTION */ CPPTEST_ON_CALL("<Function>")[-><Condition>]-><Parameters>; /* EXPECT NUMBER OF CALLS */ CPPTEST_EXPECT_NCALLS("<Function>", <Parameters>); /* EXPECT NUMBER OF CALLS MORE THAN */ CPPTEST_EXPECT_NCALLS_MORE_THAN("<Function>", <Parameters>); /* EXPECT NUMBER OF CALLS LESS THAN */ CPPTEST_EXPECT_NCALLS_LESS_THAN("<Function>", <Parameters>); /* EXPECT NUMBER OF CALLS IN RANGE */ CPPTEST_EXPECT_NCALLS_IN_RANGE("<Function>", <Parameters>); /* EXPECT CALL SEQUENCE */ CPPTEST_EXPECT_CALL_SEQUENCE()->Add("<Function>")->Add("<Function>")... ; |
「変数」ステップを使って、変数定義、初期化、および代入を指定します。ローカル変数とグローバル変数の両方を追加できます。通常、変数は入力値 (事前条件) を設定するために使用されます。
[型] フィールドでは、変数の型を指定します。グローバル変数を設定する場合、[型] フィールドは空白のままにします。Ctrl キーを押しながらスペース キーを押すと、既知の型が表示されます。
[名前] フィールドには変数の名前を入力します。このフィールドは必須です。メンバー変数の場合、[名前] フィールドにはオブジェクト変数 (object.mVariable
または object->mVariable
) も含めるべきです。同じ名前で複数の変数を定義した場合、警告がレポートされます。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
[値] フィールドには、初期化して変数に代入するための値を入力します。有効な任意の C/C++ 初期化子 (定数、式、関数呼び出しなど) を使用できます。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
[<Type>] <Name> [= <Value>];
複数の SET RETURN VALUE アクションを指定した場合、上から下に順番にアクションが処理されます。条件に一致した最後のアクションが実施されます。
関数と条件に CALL ORIGINAL アクションも指定した場合、CALL ORIGINAL アクションが SET RETURN VALUE アクションよりも優先され、オリジナル関数が呼び出されます。
複合型のパラメーターを変更する場合は、「複合型に対応するための基本方法」で説明するように CUSTOM ACTION を使用します。
[パラメーター] 列で、<stub parameter name>=<value> 構文を使ってスタブ パラメーターを指定します。セミコロンで区切ったリストもサポートされます。
paramA=100; paramB=localVar; paramC=ByRef(globalVar) arrayParamD[3]=10 |
同じパラメーターに複数の SET PARAMETERS アクションを指定した場合、上から下に順番にアクションが処理されます。条件に一致した最後のアクションが実施されます。
関数と条件に CALL ORIGINAL アクションも指定した場合、変更されたパラメーターでオリジナル関数が呼び出されます。
複合型の戻り値を変更する場合は、「複合型に対応するための基本方法」で説明するように CUSTOM ACTION を使用します。
(任意) カスタム アクションを実行する条件を [条件] 列で指定します。カスタム アクションは、スタブ APIを使って次のように C/C++ コードで表現されます。
CPPTEST_ON_CALL("<Function>")->[If()-><Condition>->]<Parameters> |
このアクションは、複合型の値を操作するために使用できます。詳細については 「複合型に対応するための基本方法」を参照してください。
「スタブ」ステップに値を入力する際、C++test は自動的に定数値の型を検出するだけでなく、パラメーター API も検出します。他の値 (変数、式) の場合、たとえば Int(<value>) や Float(<value>)
のように、値の型はスタブ API を使って明示的に指定する必要があります。これは C++ 言語のテスト ケースでは不要です。
以下の構文を使って条件 (つまり SET RETURN VALUE、CALL ORIGINAL、USE CUSTOM ACTION) を定義します。
<name of stub parameter> <operator> <value> |
Examples:
paramA == 10 (condition will be met if "paramA" stub parameter equals 10) paramB > 100 (condition will be met if "paramB" stub parameter is greater than 100) |
PPTEST_NCALLS <operator> <number of calls> |
例:
CPPTEST_NCALLS == 10 (condition will be met for 10th call to stub function) CPPTEST_NCALLS < 5 (condition will be met during the first 4 calls to stub function) |
If().Arg("param1").Greater().Value(10)
1 つの条件で単純構文と拡張構文を混在させることはできません。