このセクションでは、ファクトリ関数を使用する方法について説明します。ファクトリ関数は構造体やクラスなどの型の特定の値を返却します。そのため、テスト ケースの自動生成およびテスト ケース ウィザードで、ファクトリ関数で設定した有効なオブジェクトを使用できます。
このセクションの内容:
ファクトリ関数とは
ファクトリ関数とは、CppTest_Factory_ 接頭辞が付く関数 (グローバル、名前空間レベル、static クラス メソッド) のことです。ファクトリ関数は指定の型を返します。1 つの型について複数のファクトリ関数を定義することができます。
C/C++test では、テスト ケースを生成する際に、ファクトリ関数が定義されている場合はファクトリ関数がその型に対する初期化オプションの 1 つと見なされます。 空ではないパラメーター リストをファクトリ関数が持つ場合、C/C++test は指定の型のオブジェクトを作成するコンストラクターの引数と同じように、 ファクトリ関数の引数を初期化します。
ファクトリ関数の定義
Type 型に対してファクトリ関数を作成するには、次のシグニチャを使って関数を記述します。
Type CppTest_Factory_<factory_function_name>(<factory_arguments>);
例:
int CppTest_Factory_generateBooleanInt(bool b) { return b ? 1 : 0; } MyClass* CppTest_Factory_createMyClass(int size, int value) { MyClass* m = new MyClass; m->initialize(size); m->setValue(value); return m; }
C/C++test はテスト ケースを生成する際にファクトリ関数の宣言を確認する必要があります。そのため、次の方法でファクトリ関数を記述することを推奨します。
- テスト ケースで使用するファクトリ関数を定義したヘッダー ファイルを作成します。たとえば、テスト対象のプロジェクト ルートの下に factory フォルダーを作成し、ヘッダー ファイルを作成してください。
- ファクトリ関数を使用するすべてのテスト対象ソース ファイルに、作成したヘッダー ファイルの include ディレクティブを追加します。#ifdef PARASOFT_CPPTEST を使ってこのinclude ディレクティブを保護することを推奨します。
ソース コード エディターを使って、テスト対象のソース ファイルに include ディレクティブを素早く追加することができます。ソース コード エディターでinclude ディレクティブを追加する箇所を右クリックし、ショートカット メニューの [Parasoft] > [C/C++test] > [スニペットを挿入] > [C/C++test ファクトリ ヘッダー インクルード] をクリックします。
- ファクトリ関数を実装したソース ファイルを作成します。テスト コンフィギュレーションの [実行] > [シンボル] タブの [次の場所で発見されたファイルのシンボルも使用] オプションで指定したフォルダーに、ファクトリ関数を実装したソース ファイルを置きます。 デフォルトは ${cpptest:cfg_dir}/safestubs;${project_loc}/stubs;${project_loc}/factory です。
ソース コード エディターを使って、ファクトリ関数のソース ファイルにファクトリ関数を素早く追加することができます。 ファクトリ関数を追加する箇所を右クリックし、ショートカット メニューの [Parasoft] > [C/C++test] > [スニペットを挿入] > [C/C++test ファクトリ関数] をクリックします。
ソース コード エディターを使って、ファクトリ関数テンプレートを素早く追加することができます。 ソース コード エディターでファクトリ関数テンプレートを追加する箇所を右クリックし、ショートカット メニューの [Parasoft] > [C/C++test] > [スニペットを挿入] > [C/C++test ファクトリ関数テンプレート] をクリックします。
注意
- 手動で記述したテスト ケースでも、テスト ケース ウィザードで作成したテスト ケースでも、スタンドアロン テスト スイートでファクトリ関数を使用する場合は、使用するファクトリ関数の宣言があるファクトリ関数ヘッダーの include ディレクティブを必ず追加してください。
- ファクトリ関数を定義したソース ファイルは、通常のビルドから除外する必要があります。詳細については 「ビルドからのテスト ケースの除外」 を参照してください。
ファクトリ関数の使用
自動生成テスト ケースの場合
自動生成テスト ケースでファクトリ関数を使用するようC/ C++test を設定するには、次の操作を行います。
- テスト コンフィギュレーションの [生成] > [テスト ケース] タブで [ファクトリ関数を使用する] チェックボックスをオンにします。
- ファクトリ関数だけを使用する場合、[初期化にはファクトリ関数だけを使用する] チェックボックスもオンにします。
テスト ケース ウィザードの場合
テスト対象のコンパイル単位で発見されたファクトリ関数は、 テスト ケース ウィザードでテスト ケースを作成する場合にも使用できます。この場合、ファクトリ関数は指定の型の初期化メソッドとして表示されます。
ファクトリ関数でのデータ ソースの使用
C/C++test で使用するよう構成したデータ ソースはファクトリ関数で使用できます (「データ ソースを使用したテスト ケースのパラメータライゼーション」)。C/C++test のデータ ソース API を使ってデータ ソースの値にアクセスできます。
例:
MyClass CppTest_Factory_getMyClassObjectFromDS (void) { MyClass obj; if (CPPTEST_DS_HAS_COLUMN("MyClass.int")) { obj.initialize(CPPTEST_DS_GET_INTEGER("MyClass.int")); } else { // Data Source not available in this test case obj.initialize(0); }
注意
- 現在実行されているテスト ケースのコンテキストに沿ったデータ ソース列がなければなりません。
- ファクトリ関数で C/C++test API を使用する場合、ファクトリ関数の定義ファイルに cpptest.h ヘッダーを必ずインクルードしてください。他のヘッダー ファイルよりも前にこのヘッダーをインクルードすることを推奨します。