このセクションの内容
テスト スイートを生成する
テスト ケースはテスト スイートに格納されるため、テスト ケースを追加するには先にテスト スイートを作成する必要があります。
- [Parasoft] > [ビューの表示] > [テスト ケース エクスプローラー] を選択してテスト ケース エクスプローラーを開きます。
- テスト ケース エクスプローラーでプロジェクトを選択します。
- [Parasoft] > [テストの実行] > [ビルトイン] > [Unit Testing] > [Generate Test Suites] を選択して、プロジェクト用に空のテスト スイートを生成します。
空のテスト スイートを手動で追加することもできます。テスト ケース エクスプローラーでプロジェクトまたはフォルダーを右クリックし、[新規追加] > [テスト スイート] を選択します。
テスト スイート データの保管場所
テスト ケースを含め、すべてのテスト スイート データは 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 */
すると、ドロップダウン メニューに新規コード セクションが表示されます。
- [ファイル] > [保存] をクリックしてテスト スイートを保存します。
更新したテスト スイートを実行する準備ができました。
テスト ケースを作成する
- テスト ケース エクスプローラーを開いてテスト スイートを右クリックします。
- [新規追加] > [エディターを使用したテスト ケース] を選択します。
- テスト ケース名を入力し、[OK] をクリックします。空のテスト ケース エディターが開きます。
- [次のテスト ケースを作成] ドロップダウン リストから関数を選択します。
- (+) ボタンをクリックして選択した関数のデフォルトのテスト ケースを開きます。
新規テスト ケースを作成 ( )- 選択された関数の新規テスト ケースを作成します。
新規パラメータライズド テスト ケースを作成 ( )- 選択された関数の新規パラメータライズド テスト ケースを作成します。テスト ケースに組み込まれたデータ ソースまたは外部データ ソースの値を使用してテスト ケースをパラメータライズできます (「データ ソースを使用したテスト ケースのパラメータライゼーション」を参照)。 - 入力値 (変数) および期待値 (アサーション) をレビューして変更します。デフォルト テスト ケースの構造の詳細については 「デフォルト テスト ケース」を参照してください。
- テスト ケースを保存してテスト スイートに追加します。
新しいテスト ケースがテスト ケース エクスプローラーに表示され、実行することができます。テスト ケースの実行方法については 「テスト ケースの実行」 を参照してください。
デフォルト テスト ケース
デフォルト テスト ケースは、選択された関数の標準的なテスト ケースを表します。デフォルト テスト ケースには以下のステップがあり、テスト ケースを実行すると、以下で説明する順序でステップが実行されます。
- 変数: すべての必要な入力値 (事前条件) が設定されます。入力値には、グローバル変数、ローカル変数 (テスト対象関数に対するパラメーター)、およびテスト オブジェクト (メンバー関数をテストする場合) が含まれます。デフォルトでは、型の標準値 (0、null、デフォルト コンストラクターなど) は、テスト ケースの作成者によってレビュー/変更される入力値として使用されます。
- 呼び出し: 「変数」のステップで設定された事前条件を使って、テスト対象関数が呼び出されます。
- アサーション: 実際の出力値は、期待値 (事後条件) に対して比較されます。出力値には、関数の戻り値、グローバル変数、およびメンバー変数 (メンバー関数をテストする場合) が含まれます。デフォルトでは、型の標準値 (0、null など) は、テスト ケースの作成者によってレビュー/変更される期待値として使用されます。
テスト ケースの構造をカスタマイズすることもできます。「Working with Steps」を参照してください。
テスト ケース エディターを使ってテスト ケースを編集する
テスト ケース エディターで編集できるのは、テスト ケース エディターを使って作成したテスト ケースだけです (「テスト ケースを作成する」を参照)。自動生成テスト ケース (「テスト ケースの自動生成」を参照)、コード エディターで作成したテスト ケース、およびテスト ケース ウィザードで作成したテスト ケース (「グラフィカルなテスト ケース ウィザードによるテスト スイートとテスト ケースの追加」を参照) はテスト ケース エディターで編集できません。
- テスト ケース エクスプローラーを開き、テスト ケースをダブルクリックします。
- テスト ケースの構造または特定のパラメーターを変更します (「Working with Steps」を参照)。
- [ファイル] > [保存] を選択してテスト ケースへの変更を保存します。
テスト ケース コードの復元
テスト ケース エディターで作成したテスト ケースをテスト ケース エディターの外で変更するべきではありません。テスト ケースを手動で変更した場合、テスト ケース エディターで生成したコードを復元できます。
- テスト ケース エクスプローラーを開き、テスト ケースを右クリックします。
- [テスト ケース コードの更新] オプションを選択します。
このオプションは、テスト スイートおよびプロジェクト レベルからも利用できます。
ステップの設定
テスト ケース エディターは、テスト ケースを一連のステップで表します。実行中、テスト ケース エディターで定義されている順番に、上から下にステップが実行されます。テスト ケース エディターでは、特定の機能を実装するさまざまなステップを利用できます。
- アサーション: 事後条件の値を検証します
- 呼び出し: テスト対象関数を呼び出します
- コード: カスタム コードを挿入します
- メッセージ: テスト実行時に出力されるメッセージを指定します
- パラメーター: テスト ケースのパラメータライゼーションを有効にします
- レポート: テスト ケースの値をレポートします
- スタブ設定: スタブを設定します
- スタブ期待値: 呼び出しのシーケンスまたは期待される回数を設定します
- スタブ(非推奨): スタブを設定します
- 変数: 入力値を設定します
利用できるステップの詳細については 「「テスト ケース」ステップのリファレンス」 を参照してください。
デフォルト テスト ケースは利用できるステップのサブセットだけを使用します (「デフォルト テスト ケース」を参照)。必要に応じて、好きな順序でさまざまなステップを設定してテスト ケース フローを定義することで、特定のシナリオを実装するようテスト ケースをカスタマイズできます。たとえば、一連の関数の「呼び出し」を実行する前に、さらにスタブ構成を実行できます。また、特定の入力/出力の値をレポートできます。
新しいステップを追加する
- テスト ケース エディターで、[新規追加] ドロップダウン メニューからステップを選択します。
- [+] ボタンをクリックします。新しいステップがテスト ケースの最後に追加されます。
- 必要に応じてステップをドラッグして順番を変更します。
既存のステップを削除する
テスト ケース エディターで、ステップの [-] ボタンをクリックします。テスト ケースからそのステップが削除されます。
ステップの順序を変更する
テスト ケース エディターで、ステップのハンドル (4 方向の矢印) をクリックしてステップをドラッグ アンド ドロップします。
ステップを複製する
テスト ケース エディターで、Ctrl キーを押しながらステップのハンドル (4 方向の矢印) をクリックし、ドラッグ アンド ドロップします。
別のテスト ケースからステップをコピーする
- 2 つのテスト ケース エディター ウィンドウを開き、並べて表示します。
- 一方のエディターでステップ ハンドル (4 方向の矢印) をクリックし、もう一方のエディターにステップをドラッグします。
スタブの振る舞いの設定
特定のテスト シナリオを実装して確実に矛盾のないランタイム環境にするために、スタブの振る舞いを設定しなければならない場合があります。動的スタブの機能を使って、スタブ構成を直接テスト ケース定義に置き、テスト ケースごとに固有のスタブ構成を持たせることができます。スタブ コールバック フレームワーク (詳細は「スタブ コールバックの使用」を参照) を使用してテスト ケースのソース コードを手動で変更するか、テスト ケース エディター インターフェイスを使用できます。テスト ケース エディターには、スタブ設定 -スタブ設定およびスタブ期待値 - のための専用のステップが用意されています。スタブの戻り値を設定したり、スタブ関数とオリジナル関数を切り替えたりといったスタブ設定を定義することができます。
テスト ケース エディターで定義されたステップは上から下の順序で実行されます。そのため、ステップが意図した順序で設定されているかを確認することが重要です。
- スタブ設定で指定された設定は、その後のテスト ケース ステップで実行が設定されたスタブ呼び出しに対してだけ有効です。スタブ設定ステップより前のステップのスタブ呼び出しは、設定されたアクションを実行しません。
- 1 つのスタブに複数のスタブ設定ステップが追加されている場合、スタブの直後のスタブ設定ステップで指定された設定が使用されます。
- スタブ期待値ステップは、期待値を定義するすべてのテスト ケース ステップより前になければなりません。これにより、すべての呼び出しがカウントされます。
- 1 つのテスト ケースに複数のスタブ期待値ステップが追加されている場合、それぞれのステップで指定された期待値が適用されます。
スタブの振る舞いの設定に関する追加情報
- スタブの振る舞いを設定するには、スタブ関数は C++test 10.3 以降を使って自動生成または手動作成されていなければなりません。
- 利用できるスタブ関数は [スタブ] ビュー ([Parasoft] > [ビューの表示] > [スタブ]) に表示されます。
- テスト ケースの「スタブ」 ステップで設定されていないスタブ関数は、スタブ定義に従って振る舞います (自動生成スタブはデフォルト値の 0、false、または null を返します)。
- 「スタブ」ステップは、スタブ構成を使用する 「呼び出し」ステップよりも前に置かなければなりません。
スタブ設定ステップ
スタブ設定ステップでは、スタブ コールバック フレームワークを使用してスタブの振る舞いを設定できます。
スタブ コールバックを使用するには、スタブ ビュー (「 [スタブ] ビューでのスタブの参照」を参照) またはテスト コンフィギュレーション (「[[実行] タブ - テストの実行方法を定義する」を参照) で直接 [スタブ コールバックの有効化] オプションをオンにする必要があります。
- [関数] フィールドにスタブ関数名を入力するか、 Ctrl + Space キーを押して利用可能なスタブのリストを表示し、設定するスタブを選択します。C++test は関数フィールドの隣に自動的にスタブ関数インターフェイスを表示します。
- スタブの振る舞いを定義する編集モードを有効にします。
テーブル – (デフォルト) パラメーターを指定するための設定テーブルを開きます。
コード – スタブの振る舞いをスクリプトで記述するためのコード エディターを開きます。
両方の編集モードでスタブの振る舞いを定義した場合、テスト ケース実行時には現在選択されているモードが使用されます。
テーブルでのスタブの振る舞いの設定
テーブル モードでは、テスト ケース実行時に実行されるアクションを定義できます。個別のテーブル行として設定され、上から下へ実行されます。
[アクション] 列でドロップダウン メニューからアクション タイプを選択します。
[P1] から [P4] 列に必要なパラメーターを入力します。アクション タイプを選択したときに自動的に表示される候補に従って入力できます。
アクション タイプ
以下のアクション タイプを使用できます。
- 値の設定: SET VALUE タイプを選択し、P1 に変数名、P2 に値を指定します。このアクションは、スタブ パラメーター、戻り値 (
*__return
)、グローバル変数、スタブ化される関数が所属するクラスのメンバーに対して定義できます。 - 関数呼び出し: CALL FUNCTION タイプを選択し、P1 に変数名、P2 に関数名、P3 に関数パラメーターを指定します。
- アサーション: 選択したアサーション タイプのアサーション パラメーターを指定します (アサーション タイプごとに候補が表示されます)。ドロップダウン メニューから選択可能なアサーション タイプは、アサーション ステップで設定されたアサーションと同じです (利用可能なアサーションについては C++test ユーザー ガイドを参照してください)。 スタブ コンフィギュレーション コード モードでは、サポートされるすべてのタイプのアサーションを手動で追加できます。「コードでのスタブの振る舞いの設定」を参照してください。このアクションを定義すると、スタブ パラメーター、親オブジェクト (
__this
)、グローバル変数、スタブ化される関数が所属するクラスのメンバーを検証できます。
呼び出し固有のパラメーター
呼び出し固有のパラメーターを定義することで、1 つのスタブの個々の呼び出しに対してスタブの振る舞いを指定できます。呼び出し固有のパラメーターは、波括弧の中にカンマで区切ったパラメーターのリストとして指定します。
- パラメーターの位置は、実行時のスタブの呼び出し回数に対応します。上の例では、値 2、37、14 は、順に初回、2 回目、3 回目の呼び出しに使用されます。
- アクションに呼び出し固有のパラメーターが設定されている場合、最後のパラメーターが省略 (下を参照) されていないかぎり、対応する回数のスタブ呼び出しでしか実行されません。上のサンプルでは、スタブが 3 回より多く実行された場合でも、アクションは 1 回目、2 回目、3 回目のスタブ呼び出しでだけ実行されます。
パラメーターの最後に省略記号 (…) を追加すると、何回目のスタブ呼び出しでもアクションが実行されるよう設定できます。結果として、明示的に指定された最後の値が残りのすべてのスタブ呼び出しで使用されます。
次の例では、値 2 と 37 が初回と 2 回目のスタブ呼び出しで使用され、値 14 が 3 回目の呼び出しと、その後のすべてのスタブ呼び出しで使用されます。
1 つのスタブ アクションが複数の呼び出し固有パラメーターのセットを使用してパラメータライズされている場合、どのセットも同じ数の値を持つ必要があります。次の例では、どの呼び出し固有パラメーターのセットにも 2 つの値があります。
パラメーター値は、特定のコンテキストにふさわしい任意の値を使用できます。例:
- {3, 5, 7} – 3 つの整数パラメーター
- {56.3, 5.22, 7.99, 0.77} – 4 つの浮動小数点パラメーター
- {foo(1), goo(2), boo(3,45)} – 3 つの関数呼び出しパラメーター
コードでのスタブの振る舞いの設定
コード モードでは、スタブの振る舞いを設定するコード スニペットを指定できます。
アサーションを含め、すべての C++test API を使用してスタブの振る舞いをコードで設定できます。
stubCallInfo->callNo
を使用し、呼び出し固有の値を指定することで、スタブの個々の呼び出しに対する振る舞いを指定できます。下の例は、以下のようにスタブを設定しています。
- 最初のスタブ呼び出しで、パラメーター a と b が 0 に等しいことを検証し、スタブは値 123 を返します。
- 他のすべてのスタブ呼び出しで、パラメーター a と b が 1 に等しいことを検証し、スタブは値 10 を返します。
スタブ期待値ステップ
スタブ期待値ステップでは、スタブ関数呼び出しに対して以下の期待値を設定できます。
- 関数呼び出しの回数
- 関数呼び出しの回数が指定された値を超えること
- 関数呼び出しの回数が指定された値を超えないこと
- 関数呼び出しの回数が指定された範囲であること
- スタブ呼び出しの順序
スタブ期待値ステップを設定するには、次の操作を行います。
- [アクション] 列でドロップダウン メニューからアクション タイプを選択します。
- [関数] 列に関数名を入力します。
- [パラメーター] 列にパラメーターを入力します。アクション タイプを選択したときに自動的に表示される候補に従って入力できます。
Expect Call Sequence アクション
[Expect Call Sequence] アクションを使用すると、指定されたスタブ関数が意図した順序で実行されているかを確認するのに役立ちます。
- [関数] 列で指定されたスタブだけをモニターし、他の関数は無視します。たとえば、次の例の呼び出し順序は、foo4、foo5 および foo7 関数を無視するため、実際の呼び出し [foo1, foo4, foo5, foo2, foo7, foo3] に一致します。
- 指定された順序が 2 回以上繰り返されても構いません。たとえば、 [foo1, foo2, foo2, foo1, foo2, foo3] という順序で実行された場合、エラーはレポートされません。
- 指定された順序の少なくとも 1 回が不完全だった場合、エラーがレポートされます。たとえば、次の呼び出しでは、2 回目の繰り返しが不完全なため、エラーがレポートされます: [foo1, foo2, foo2, foo1, foo2].
サポートされるスタブ設定アクション
スタブ パラメーター、戻り値、グローバル変数、親クラスのメンバーを変更する
- 特定の関数に対してスタブ設定ステップを追加します (または既存のステップを選択します)。
- [アクション] 列で SET VALUE を選択します。
- [P1] 列に値を代入する変数名を入力します。戻り値を変更する場合、*__return を使用します。
- [P2] 列に値を指定します。
スタブ パラメーター、親オブジェクト (__this
)、グローバル変数、親クラスのメンバーの値を検証する
- 特定の関数に対してスタブ設定ステップを追加します (または既存のステップを選択します)。
- [アクション] 列で CPPTEST_ASSERT を選択します。
- [P1] 列に期待値を入力します。
- [P2] 列に実際の値 (変数名) を入力します。
- 必要に応じて [P3] および [P4] 列に追加の値を入力します。
オリジナル関数を呼び出す (関数のオリジナル定義が利用可能な場合)
- 特定の関数に対してスタブ設定ステップを追加します (または既存のステップを選択します)。
- [アクション] ドロップダウン リストから CALL FUNCTION を選択します。
- [P1] 列に値が代入される *__return 変数を入力します。
- [P2] 列に関数名を入力します。
- [P3] 列にオリジナル関数のパラメーターを入力します。
期待される呼び出しの回数を設定する
- スタブ期待値ステップを追加します。
- [アクション] ドロップダウン リストから EXPECT NUMBER OF CALLS を選択します。
- [関数] 列で関数名を指定します。スタブ関数が存在することを確認してください。
- 期待される呼び出しの回数を [パラメーター] 列で指定します。
期待される呼び出しシーケンスを設定する
- スタブ期待値ステップを追加します。
- [アクション] ドロップダウン リストから EXPECT CALL SEQUENCE を選択します。
- 関数名のシーケンスをカンマで区切って [関数] 列で指定します。スタブ関数が存在することを確認してください。
スタブ呼び出しでカスタム アクションを定義する
- 特定の関数に対してスタブ設定ステップを追加します (または既存のステップを選択します)。
- コード編集モードを有効化します。
- コード エディターでスタブの振る舞いを変更するコードを記述します。
テスト ケース パラメータライゼーションの追加
テスト シナリオで、事前条件と事後条件に異なる値を使って同じテストを実行する必要がある場合、「パラメーター」ステップを利用できます。ビルトインのテーブルまたは 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)
のパラメータライズド テスト ケースを表しています。ビルトインのテーブルで指定された値が、データ ソース マクロおよび列名を使用して、変数、スタブ設定、アサーション ステップに適用されています。
パラメーター ステップ
パラメーター ステップの設定には以下のオプションがあります。
- ビルトイン (テーブル) ラジオ ボタン - テスト ケースにパラメータライズ値を指定するためのテーブルを追加します。
- データ ソース ラジオ ボタン - パラメータライズ値を指定するための外部データ ソースを定義します。
- 新規データ ソースの作成 アイコン- 新規外部データ ソースを作成します。
- データ ソースの編集 アイコン - データ ソースを開きます。
- データ ソース ファイルを開く アイコン - 既存のデータ ソース ファイルを開きます。
- 列名の更新 アイコン - 列名を表示します。
- Parameterize test case... アイコン - 以下を行うためのダイアログを開きます。
- データ ソースの列名パターンをカスタマイズする
- パターンに一致する列の値で自動的にテスト ケースを更新する (「テスト ケースのパラメータライズ」を参照)。
テスト ケースのパラメータライズ
すでに追加されているデータ ソースの値でテスト ケースをパラメータライズするには、次の操作を行います。
- [Parameterize test case...] アイコンをクリックし、テスト ケース エディター ダイアログを開きます。
- 列の命名パターンを指定します。パターンには以下が含まれている必要があります。
- {CONTEXT} - 列から取得された値が使用されるコンテキスト。以下のコンテキストがあります。
V は変数ステップを表します。
A はアサーション ステップを表します。
SV はスタブ設定ステップの SET VALUE アクション タイプを表します。
SA はスタブ設定ステップのアサーションを表します。
- {TYPE} - 値を取得するのに使用するデータ ソース マクロ。以下のタイプがあります。
IはCPPTEST_DS_GET_INTEGER
を表します。
F はCPPTEST_DS_GET_FLOAT
を表します。
S はCPPTEST_DS_GET_CSTR
を表します。
C はCPPTEST_DS_GET_CHAR を表します。
B はCPPTEST_DS_GET_BOOL
を表します。
U はCPPTEST_DS_GET_UINTEGERを表します。
M(<size>) はCPPTEST_DS_GET_MEM_BUFFER
を表します。
E(<type>) はCPPTEST_DS_GET_ENUM を表します。
- {VARIABLE} - 変数名です。
デフォルトは
{CONTEXT}#{TYPE}#{VARIABLE
} です (「例」を参照)。
- [OK] をクリックします。パターンに一致するデータ ソースの値でテスト ケースが更新されます。
値とメッセージのレポート
テスト ケースの値をレポートするには、「レポート」ステップを使用します。「レポート」ステップには型の値を出力するレポート関数が用意されています (たとえば CPPTEST_REPORT_INTEGER() や CPPTEST_REPORT_FLOAT()
など)。レポート関数は [型] ドロップダウン リストに表示されます。レポート関数を選択すると、必須パラメーターが [P1] から [P3] 列に表示されます。
別の方法として、「メッセージ」ステップを使って実行中に単純なテキスト メッセージを出力することもできます。追跡可能な識別子の出力やデバッグの目的で、「メッセージ」ステップを利用できます。
「レポート」および「メッセージ」ステップの出力はコンソールに表示されます。これらの出力は単体テスト レポートに含めることもできます。
カスタム コードの挿入
「コード」ステップを使ってテスト ケースに複雑なロジックを追加できます。「コード」ステップでは C/C++ のカスタム コードを実装します。カスタム コードは、テスト ケース定義の任意の場所に置くことができますが、上から下の順序で実行されるため、どこにステップを置くかが重要です。「コード」ステップでは、それより前の 「変数」 ステップで定義された変数を使用できます。「コード」ステップで導入された変数は、その後のステップで再利用できます。
テスト ケース エディターは、「コード」ステップに入力されたカスタム コードの正しさを検証しません。構文エラーはテスト ケースの実行中にレポートされます。
「テスト ケース」ステップのリファレンス
テスト ケース エディターには以下のステップが用意されています。テスト ケースを定義するときにこれらのステップを基本構成要素として使用できます。
アサーション
アサーションは、期待値に対して実際の値を検証します。通常、出力値 (事後条件) をチェックするために使用されます。
型
利用できるアサーションの型をドロップダウン リストから選択できます。サポートされるすべてのアサーションの一覧については、「テスト ケース検証マクロ」を参照してください。テスト ケース検証マクロサポートされるすべてのタイプのアサーションを手動でコード セクションに追加できます。「Code」を参照してください。
P1, P2, P3, P4 (追加パラメーター)
利用できるパラメーターは、アサーションの型によって異なります。パラメーター フィールドを選択して Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
対応する C / C++ コード
<Type>([<P1>, <P2>, <P3>, <P4>]);
呼び出し
「呼び出し」ステップを使用して、テスト対象関数を呼び出すことができます。1 つのテスト ケースで複数の「呼び出し」ステップを使用して、呼び出しシーケンスを定義できます。テスト ケース エディターは、入力された呼び出しパラメーターの正しさは検証しません。
リターン
[リターン] フィールドは、戻り値を格納するための変数です。戻り値が必要ない場合は空白のままにします。Ctrl キーを押しながらスペース キーを押すと、既知の型のリストが表示されます。
名前
[名前] フィールドは関数名です。メンバー関数の場合、[名前] フィールドにはオブジェクト変数 (object.mFunction または object->mFunction
) も含めるべきです。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
パラメーター
カンマで区切ったパラメーター リストを入力できます。有効な任意の C/C++ パラメーター (定数、変数、式など) が入力可能です。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
対応する C / C++ コード
[<Return> =] <Name>(<Parameters>);
コード
「コード」フィールドでは、テスト ケースの実行時に実行される C/C++ のカスタム コードを入力できます。「コード」ステップでは、それより前のステップですでに定義されているシンボルを使用できます。「コード」ステップで導入された変数は、その後のステップで使用できます。なお、テスト ケース エディターは、入力されたコードの正しさは検証しません。
対応する C / C++ コード
<Code>
グローバル
「グローバル」は、テスト スイートに固有の変数定義、初期化、および代入を指定します。グローバル変数はテスト ケースで使用できます。「グローバル」は、テスト スイート エディターでだけ使用できます。
型
[型] フィールドにはグローバル変数の型を入力します (必須です)。Ctrl キーを押しながらスペース キーを押すと、既知の型のリストが表示されます。
名前
[名前] フィールドにはグローバル変数の名前を入力します (必須です)。同じ名前で複数の変数を定義した場合は警告がレポートされます。
値
[値]フィールドには、変数に代入する初期値を入力します。有効な任意の C/C++ 初期化子 (定数、式など) を入力できます。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
対応する C / C++ コード
<Type> <Name> [= <Value>];
メッセージ
「メッセージ」ステップには、単純なテキスト メッセージを入力します。このメッセージは、 CPPTEST_REPORT() を使ってテストの実行中に出力されます。「メッセージ」ステップは、トレーサビリティやデバッグのために役立ちます。メッセージはそのまま出力されます (変数や式は使用できません)。また、すべての引用符がエスケープされます。
対応する C / C++ コード
CPPTEST_REPORT(“<Message>”);
パラメーター
「パラメーター」は、テスト パラメーターを設定するためのステップです。テスト ケースは行ごとに単独で実行されます。「パラメーター」ステップは、1 つのテスト ケースで 1 つだけ使用できます。「パラメーター」ステップの値は、パラメーター API を使ってアクセスできます。パラメーター ステップには、ビルトイン (テーブル) モードとデータ ソース モードという 2 つのモードがあります。
ビルトイン (テーブル) モード
[ビルトイン (テーブル)] オプションを有効にすると、パラメーター エディターに直接値を入力できます。
このモードでは、各列 (A、B、C など) が変数を表し、各行がテスト ケースの実行中に使用されるデータの 1 次元配列を表します。
データ ソース モード
既存のデータ ソースを使用するには、[データ ソース] オプションを有効にしてデータ ソース名を入力します。スペース キーを押しながら Ctrl キーを押すと、利用できるデータ ソースの名前が表示されます。
データ ソース名を入力した後、以下の処理を実行できます。
- 列名の更新: 指定したデータ ソースの列名をロードします。ロードされた列名が「パラメーター」ステップに表示されます。
- 新規データ ソースの作成: 入力したデータ ソース名が既存のデータ ソース名に一致しない場合、入力した名前で新しいデータ ソースが作成されます。
- データ ソースの編集: 指定したデータ ソースをデータ ソース エディターで開きます。
- データ ソース ファイルを開く: 指定した CSV または Excel データ ソースのデータ ソース ファイルを開きます。
データ ソース モードでは、行や列名なども含めて定義済みのデータ ソースが使用されます。[列名の更新] ボタンをクリックすると、既存のデータ ソースの列名が表示されます。[列名の更新] ボタンをクリックすると列名だけが表示されます。このモードでは、既存のデータ ソースの行は表示されません。
対応する C / C++ コード
N/A
レポート
「レポート」ステップでは、テストの実行中にランタイム値を出力するメッセージを設定できます。「レポート」ステップは、入力/出力の値を出力したりデバッグしたりするために使用されます。
型
[型] ドロップダウン リストからレポートの型を選択します。サポートされるレポート タイプの一覧については「テスト ケース レポート マクロ」を参照してください。
P1, P2, P3 (追加パラメーター)
利用できるパラメーターは、レポートの型によって異なります。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
対応する C / C++ コード
<Type>([<P1>, <P2>, <P3>]);
スタブ設定
「スタブ設定」ステップでは、現在のテスト ケースのスタブ構成を設定します。「スタブ設定」ステップは、スタブ設定を使用する 「呼び出し」ステップよりも前に置かなければなりません。「スタブの振る舞いの設定」も参照してください。
アクション
[アクション] フィールドでは、スタブの振る舞いまたは期待されることを指定します。利用できるアクションがドロップダウン リストに表示されます。以下のアクションがサポートされます。
- SET VALUE: 値を変更します。このアクションは、スタブ パラメーター、戻り値、グローバル変数およびスタブ化される関数が所属するクラスのメンバーに対して定義できます。
- CALL FUNCTION: 呼び出される関数を指定します。
- CPPTEST_ASSERT: (アサーション): 実際の値と期待値を比較して検証します。アサーションのタイプはドロップダウン メニューから選択できます (選択できるアサーションは、アサーション ステップで設定できるものと同じです。アサーションの一覧については「テスト ケース検証マクロ」を参照してください)。
P1, P2, P3 (追加パラメーター)
P1、P2、P3 および P4 フィールドでは、選択したアクション タイプのパラメーターを指定します。パラメーターはアクション タイプによって異なります。アクション タイプを選択したときに自動的に表示される候補に従って入力できます。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
テーブル/コード モード
[テーブル] および [コード] ラジオ ボタンで、スタブの振る舞いを定義するのに使用する編集モードを選択します。
- テーブル – (デフォルト) パラメーターを指定するための設定テーブルを開きます。
- コード – スタブの振る舞いをスクリプトで記述するためのコード エディターを開きます。
スタブ期待値
「スタブ期待値」ステップでは、スタブ呼び出しの期待される回数または順序を設定します。「スタブ期待値」ステップは、スタブ設定を使用する 「呼び出し」ステップよりも前に置かなければなりません。「Configuring Stub Behavior」も参照してください。
アクション
[アクション] フィールドでは、期待値のタイプを指定します。利用できるタイプがドロップダウン リストに表示されます。以下のアクションがサポートされます。
- EXPECT NUMBER OF CALLS: 期待される呼び出しの回数を設定します。
- EXPECT NUMBER OF CALLS MORE THAN: 期待される呼び出しの回数を設定します。
- EXPECT NUMBER OF CALLS LESS THAN: 期待される呼び出しの回数を設定します。
- EXPECT NUMBER OF CALLS IN RANGE: 期待される呼び出しの回数を設定します。
- EXPECT CALL SEQUENCE: 期待される呼び出しの順序を設定します。
関数
[関数] フィールドでは、構成を適用するスタブ関数の関数識別子を指定します。EXPECT CALL SEQUENCE の場合、カンマで区切った関数識別子の呼び出しシーケンスを入力します。
関数識別子は、スタブを特定するために使用する文字列です。デフォルトでは、C++test が生成するスタブは以下のパターンの識別子を使用します。[parent::]<function_name>
接頭辞 parent::
は、関数/メソッドがクラスまたは名前空間メンバーの場合にだけ追加されます。直接の親だけが追加されます。テンプレート クラス メソッドの場合、親の名前ではテンプレート パラメーターが省略されます。
C++test は、関数のすべてのオーバーロードに同じ関数識別子を使用します。必要に応じて、スタブ定義を変更して、オーバーロードされるスタブ関数ごとに固有の関数識別子を使用できます。そうすれば、オーバーロードされた関数/メソッドに対してスタブを区別することができます。
パラメーター
パラメーター フィールドでは、選択したアクション タイプのパラメーターを指定します。パラメーターはアクション タイプによって異なります。アクション タイプを選択したときに自動的に表示される候補に従って入力できます。
スタブ (非推奨)
「スタブ」ステップでは、現在のテスト ケースのスタブ構成を設定します。「スタブ設定」ステップは、スタブ設定を使用する 「呼び出し」ステップよりも前に置かなければなりません。「スタブの振る舞いの設定」も参照してください。
アクション
[アクション] フィールドでは、スタブの振る舞いまたは期待されることを指定します。利用できるアクションがドロップダウン リストに表示されます。以下のアクションがサポートされます。
- SET RETURN VALUE: 戻り値を変更します (単純型のみ)。
- SET PARAMETERS: スタブ パラメーターを変更します。
- CALL ORIGINAL: オリジナル関数を呼び出します。
- USE CUSTOM ACTION: スタブ呼び出しに対してカスタム アクションを実行します。
- EXPECT NUMBER OF CALLS: 期待される呼び出しの回数を設定します。
- EXPECT NUMBER OF CALLS MORE THAN: 期待される呼び出しの回数を設定します。
- EXPECT NUMBER OF CALLS LESS THAN: 期待される呼び出しの回数を設定します。
- EXPECT NUMBER OF CALLS IN RANGE: 期待される呼び出しの回数を設定します。
- EXPECT CALL SEQUENCE: 期待される呼び出しの順序を設定します。
関数
[関数] フィールドでは、構成を適用するスタブ関数の関数識別子を指定します。EXPECT CALL SEQUENCE の場合、カンマで区切った関数識別子の呼び出しシーケンスを入力します。
関数識別子は、スタブを特定するために使用する文字列です。デフォルトでは、C++test が生成するスタブは以下のパターンの識別子を使用します。[parent::]<function_name>
接頭辞 parent::
は、関数/メソッドがクラスまたは名前空間メンバーの場合にだけ追加されます。直接の親だけが追加されます。テンプレート クラス メソッドの場合、親の名前ではテンプレート パラメーターが省略されます。
C++test は、関数のすべてのオーバーロードに同じ関数識別子を使用します。必要に応じて、スタブ定義を変更して、オーバーロードされるスタブ関数ごとに固有の関数識別子を使用できます。そうすれば、オーバーロードされた関数/メソッドに対してスタブを区別することができます。
パラメーター
利用できるパラメーターは、アクションの種類によって異なります。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリスト、パラメーター API、およびスタブ API が表示されます。
条件
[条件] フィールドでは条件を指定できます。利用できる条件は、アクションの種類によって異なります。Ctrl キーを押しながらスペース キーを押すと、既知の変数のリスト、パラメーター API、およびスタブ API が表示されます。
対応する C / C++ コード
/* 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 キーを押しながらスペース キーを押すと、既知の変数のリストが表示されます。
対応する C / C++ コード
[<Type>] <Name> [= <Value>];
非推奨のスタブ ステップ設定アクション
単純型の値を返す関数の戻り値を変更する
- [アクション] ドロップダウン リストから SET RETURN VALUE を選択します。
- [関数] 列で関数名を指定します。そのスタブ関数が存在することを確認してください。
- [パラメーター] 列で戻り値を指定します。
- (任意) 戻り値を返す条件を [条件] 列で指定します。
複数の SET RETURN VALUE アクションを指定した場合、上から下に順番にアクションが処理されます。条件に一致した最後のアクションが実施されます。
関数と条件に CALL ORIGINAL アクションも指定した場合、CALL ORIGINAL アクションが SET RETURN VALUE アクションよりも優先され、オリジナル関数が呼び出されます。
複合型のパラメーターを変更する場合は、「複合型に対応するための基本方法」で説明するように CUSTOM ACTION を使用します。
単純型の値のスタブ パラメーターを変更する
- [アクション] ドロップダウン リストから SET PARAMETERS を選択します。
- [関数] 列で関数名を指定します。そのスタブ関数が存在することを確認してください。
[パラメーター] 列で、
<stub parameter name>=<value>
構文を使ってスタブ パラメーターを指定します。セミコロンで区切ったリストもサポートされます。例:paramA=100; paramB=localVar; paramC=ByRef(globalVar) arrayParamD[3]=10
- (任意) パラメーターが変更される条件を [条件] 列で指定します。
同じパラメーターに複数の SET PARAMETERS アクションを指定した場合、上から下に順番にアクションが処理されます。条件に一致した最後のアクションが実施されます。
関数と条件に CALL ORIGINAL アクションも指定した場合、変更されたパラメーターでオリジナル関数が呼び出されます。
複合型のパラメーターを変更する場合は、「複合型に対応するための基本方法」で説明するように CUSTOM ACTION を使用します。
利用可能なオリジナル定義を使って関数のオリジナル関数を呼び出す
- [アクション] ドロップダウン リストから CALL ORIGINAL を選択します。
- [関数] 列で関数名を指定します。スタブ関数が存在することを確認してください。
- (任意) オリジナル関数を呼び出す条件を [条件] 列で指定します。
期待される呼び出しの回数を設定する
- [アクション] ドロップダウン リストから EXPECT NUMBER OF CALLS を選択します。
- [関数] 列で関数名を指定します。スタブ関数が存在することを確認してください。
- 期待される呼び出しの回数を [パラメーター] 列で指定します。
期待される呼び出しシーケンスを設定する
- [アクション] ドロップダウン リストから EXPECT CALL SEQUENCE を選択します。
- 関数名のシーケンスをカンマで区切って [関数] 列で指定します。スタブ関数が存在することを確認してください。
スタブ呼び出しでカスタム アクションを定義する
- [アクション] ドロップダウン リストから USE CUSTOM ACTION を選択します。
- [関数] 列で関数名を指定します。スタブ関数が存在することを確認してください。
- [パラメーター] 列でカスタム アクションを指定します。アクションはスタブ API を使って定義します。詳細については 「スタブ API の使用 (非推奨)」を参照してください。
(任意) カスタム アクションを実行する条件を [条件] 列で指定します。
カスタム アクションは、スタブ APIを使って次のように C/C++ コードで表現されます。CPPTEST_ON_CALL("<Function>")->[If()-><Condition>->]<Parameters>
このアクションは、複合型の値を操作するために使用できます。詳細については 「 複合型に対応するための基本方法」を参照してください。
C テスト ケースについて
「スタブ」ステップに値を入力する際、C++test は自動的に定数値の型を検出するだけでなく、パラメーター API も検出します。他の値 (変数、式) の場合、たとえば Int(<value>) や Float(<value>)
のように、値の型はスタブ API を使って明示的に指定する必要があります。これは C++ 言語のテスト ケースでは不要です。
条件定義のための構文
以下の構文を使って条件 (つまり SET RETURN VALUE、CALL ORIGINAL、USE CUSTOM ACTION) を定義します。
単純構文
<name of stub parameter> <operator> <value>
例:
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)
拡張構文
- スタブ API を使って複雑な条件を作成できます。「スタブ API の使用 (非推奨)」 を参照してください。
例:If().Arg("param1").Greater().Value(10)
1 つの条件で単純構文と拡張構文を混在させることはできません。