Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

テンプレート関数はデータ型が未定の場合、そのままではテストケースやスタブを作成することはできません。
関数テンプレートが特殊化されていれば、データ型を確定できるためテストケースやスタブを作成することができます。

■特殊化されていないテンプレート関数

...

もし、テストのために特殊化した実装を使用しても良い場合は、「PARASOFT_CPPTEST」というC/C++test実行時のみ有効になるパラメーターを使用することで特殊化したテンプレート関数の実装を開発生成物に反映させないようにすることもできます。

■#ifdef PARASOFT_CPPTEST~#endifで、コード中でコールしているデータ型に特殊化したテンプレート関数を実装

...

なお、テンプレート関数でも以下のケースは制限事項によりスタブ化は不可となります。

  • 関数の引数がデータ型ではなくテンプレート型(テストケースは特殊化することで作成可能)

...

Note

2021.2以前のテンプレート関数のテストケースやスタブの作成方法は、以下のページをご参照ください。

「テンプレート関数のテストケースやスタブを作成する」- C/C++test 2021.2 Tips


テンプレート関数のテストケースやスタブを作成するために従来まではテンプレート関数の特殊化(データ型の確定)が必要でしたが、C/C++test2022.2からはテスト対象コードで実際に引数で使用されているデータ型に対するテストケースやスタブ関数を作成することができるようになりました。
テンプレート関数の定義と、実際にそのテンプレート関数をコールしている実装部のコードの両方を含む形で、「Generate Test Suites」して作成したテストスイートならば、実装部で指定したデータ型をベースとしたテストケースを作成することができます。また、スタブにつきましては「Collect Stub Information」を実施しますと、以下の通りになります。

2021.2_CollectStubInfo.pngImage Added

2022.2_CollectStubInfo.pngImage Added

上図では「addVal()」というテンプレート関数に対して、2021.2までは「Colect Stub Information」を実行してもスタブ対象の関数として認識されませんが、2022.2以降の場合「Colect Stub Information」の設定を変更(※)することで、addVal()のテンプレート引数をint型やdouble型で実装しているため、スタブ対象も引数がint型、double型の2種類でスタブ作成が可能になっています。

(※)
 「Collect Stub Information」をユーザー定義化して
 「実行」>「全般」から「実行の詳細」の「インストゥルメント モード」>「編集」を押下して
 「C/C++ テンプレートのスタブを有効化」オプションをオンに設定します。

instrument_tmplstub.pngImage Added

テスト実行用のテストコンフィギュレーション(「Run Unit Tests」など)も同様に設定を変更することで、テンプレート関数のスタブを使って処理を実施します。

なお、テンプレート関数のスタブを使用するには、以下の条件が必要です。

  • テンプレート関数のスタブをサポートしているコンパイラであること
    C/C++testでは、以下の3種類のみをサポートしています。
    GNU GCC 5.x 以降
    Clang C/C++ Compiler 5 以降
    Microsoft Visual C++ 14.0 (2015) 以降

  • 作成したスタブコードからテンプレートの宣言を参照できること
    テンプレート宣言をソースコードに記載している場合はスタブが使えません。

  • テンプレート引数のデータ型がテンプレートの宣言よりも前に定義されていること
    データ型がソースコードで定義されている場合はスタブが使えません。

また、以下の状況ではテンプレート関数のスタブはサポートできません。

  • コンストラクターおよびデストラクター

  • 変換演算子

  • 暗黙的に定義された関数

  • default および delete 宣言された関数

  • friend 関数

  • STLメソッド

  • テンプレート関数内で宣言されたテンプレート関数