Versions Compared

Key

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

注意------

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

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

------

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

2021.2_CollectStubInfo.png

2022.2_CollectStubInfo.png

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

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

instrument_tmplstub.png

テスト実行用のテストコンフィギュレーション(「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メソッド

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