注意------
2021.2以前のテンプレート関数のテストケースやスタブの作成方法は、以下のページをご参照ください。
「テンプレート関数のテストケースやスタブを作成する」- C++test 2021.2 Tips
------
テンプレート関数のテストケースやスタブを作成するために従来まではテンプレート関数の特殊化(データ型の確定)が必要でしたが、C++test2022.2からはテスト対象コードで実際に引数で使用されているデータ型に対するテストケースやスタブ関数を作成することができるようになりました。
テンプレート関数の定義と、実際にそのテンプレート関数をコールしている実装部のコードの両方を含む形で、「Generate Test Suites」して作成したテストスイートならば、実装部で指定したデータ型をベースとしたテストケースを作成することができます。また、スタブにつきましては「Collect Stub Information」を実施しますと、以下の通りになります。
上図では「addVal()」というテンプレート関数に対して、2021.2までは「Colect Stub Information」を実行してもスタブ対象の関数として認識されませんが、2022.2の場合「Colect Stub Information」の設定を変更(※)することで、addVal()のテンプレート引数をint型やdouble型で実装しているため、スタブ対象も引数がint型、double型の2種類でスタブ作成が可能になっています。
(※)
「Collect Stub Information」をユーザー定義化して
「実行」>「全般」から「実行の詳細」の「インストゥルメント モード」>「編集」を押下して
「C++ テンプレートのスタブを有効化」オプションをオンに設定します。
テスト実行用のテストコンフィギュレーション(「Run Unit Tests」など)も同様に設定を変更することで、テンプレート関数のスタブを使って処理を実施します。
なお、テンプレート関数のスタブを使用するには、以下の条件が必要です。
テンプレート関数のスタブをサポートしているコンパイラであること
C/C++test2022.2では、以下の3種類のみをサポートしています。
GNU GCC 5.x 以降
Clang C/C++ Compiler 5 以降
Microsoft Visual C++ 14.0 (2015) 以降作成したスタブコードからテンプレートの宣言を参照できること
テンプレート宣言をソースコードに記載している場合はスタブが使えません。テンプレート引数のデータ型がテンプレートの宣言よりも前に定義されていること
データ型がソースコードで定義されている場合はスタブが使えません。
また、以下の状況ではテンプレート関数のスタブはサポートできません。
コンストラクターおよびデストラクター
変換演算子
暗黙的に定義された関数
default および delete 宣言された関数
friend 関数
STLメソッド
テンプレート関数内で宣言されたテンプレート関数