このセクションでは、C++test 6.x のテスト資産を C++test 10.x に移行する方法について説明し ます。
このセクションの内容
テスト コンフィギュレーション
C++test 6.x からテスト コンフィギュレーションをインポートするには、次の操作を行います。
- (推奨) C++test 6.x のテスト コンフィギュレーションのユーザー定義ルールに C++test 10.x からアクセスできること (つまり Team Server で共有していること) を確認します。
- [Parasoft] メニューの [テストコンフィギュレーション] をクリックします。
- [ユーザー定義] カテゴリを右クリックし、ショートカットメニューの [C++test 6.x テス ト コンフィギュレーションのインポート] をクリックします。ファイル選択用ダイアログで適切な C++test 6.x テスト コンフィギュレーション ファイル (.tcfg ファイル) を選択します。
C++test 6.x のテスト コンフィギュレーションと同じ名前でユーザー定義テスト コンフィギュレーションが作成されます。次のデータが C++test 6.x のテスト コンフィギュレーションからインポートされます。
- 静的解析ルールの状態 (有効/無効)
- 有効な静的解析ルール。C++test 6.x のビルトイン静的解析ルールは、現行バージョンのビ ルトイン静的解析ルールにマップされます。ただし、C++test 6.x と現行バージョンとでは、ルールの識別子、メッセージ、重要度レベルが異なります。カスタム ルール名を指定するとき、たとえば
<rule_category>-<rule_unique_id>
(myrule-123, user-456
) のように、ハイフ ン "-" を使ってルール カテゴリとルール ID を区切ることを推奨します。 そうすると、 C++test はルール カテゴリに基づいて自動的にルール ツリー構造を作成します。 - 単体テストの生成の状態 (有効/無効)
- 生成されるテスト ケースの最大数
- テスト ケースの結果を事後条件として表示
- アサーション テンプレートの自動挿入
- テスト オブジェクトのメモリ割り当て (スタックまたはヒープ)
- 入力値に経験則を使用する
- 派生クラスのオブジェクトを使用する
- グローバル変数を初期化する
- 単体テストの実行の状態 (有効または無効)
- テスト ケースのタイムアウト時間
- カットオフ日の後に作成または変更されたファイルだけをテストする
その他のすべてのパラメーターはデフォルトに設定されます。
C++test 6.x テスト コンフィギュレーションで有効だったルールに C++test 10.x がアクセスできない場合、警告メッセージが表示されます。
UNKNOWN カテゴリに追加されたルールは、ルール マッピングを使ってカテゴリを変更できます。詳細については「ルール カテゴリ、ID、ヘッダー、重要度レベルの変更」を参照してください。
Team Server に格納されたテスト コンフィギュレーションを移行するには、 User フォルダーにインポートしてから、 C++test 10.x 形式で Team Server に再度アップロードします。
ソース テストのテスト スイート
C++test 6.x から「ソース テスト」のテスト スイートをインポートする方法は 2 つあります。すべてのテスト スイートを 1 つのディレクトリにインポートする方法と、各 C++test 6.x テスト ユニットのテスト スイートを個別のサブ ディレクトリにインポートする方法です。
テスト スイートをインポートする前に、次の点に注意してください。
- 6.x プロジェクトにシンボル データがなければなりません (「シンボルの読み込み」アクション)
- C++test 10.x プロジェクトに、6.x プロジェクトと同じ (物理的) ソース ファイルがなければなりません。「論理的」プロジェクト レイアウトは異なってもかまいません (つまり、リンクされたディレクトリなどを使用できます)。
- テスト ユニットまたはグローバル シンボル レベルで複数ファイル単位に対して作成された「インクルード」テスト スイートはインポートされません。
C++test 6.x プロジェクトからテスト スイートをインポートするには、次の操作を行います。
1. ショートカット メニューの [新規] > [その他] をクリックします。ウィザードが表示されます。
2. [C++test] > [C++test 6.x テスト スイートのインポート] を選択して [次へ] をクリックします。
3. [C++test 6.x プロジェクト ファイル] フィールドで 、C++test 6.x プロジェクト ファイルの場所を指定します。プロジェクト ファイルの拡張子は .cpf でなければなりません。
4. [インポートされるテスト スイートの場所] ドロップ ダウン リストから、すべてのテストスイートを 1 つのディレクトリにインポートするのか、それとも各 C++test 6.x テスト ユニットのテスト スイートを個別のディレクトリにインポートするのかを指定します。そして、表示されたテキストを変更してテスト スイートの保存先を指定します。次の変数を使用できます。
${src_file_name}
- コンテキスト ファイルの名前。「コンテキスト ファイル」とは、 テスト対象関数が定義されているコンパイル単位を表すソースのことです。${src_file_base_name}
- コンテキスト ファイルの名前 (拡張子なし)。${src_file_ext}
- コンテキスト ファイルの拡張子。${src_file_loc_rel}
- コンテキスト ファイルの場所 (プロジェクトからの相対)${src_file_uid}
- コンテキスト ファイルの一意な識別子${unit_name}
- インポートするテスト スイートの C++test 6.x テスト ユニット
5. 必要に応じて次のオプションを変更します。
- 複製されたテスト スイートの名前を自動的に変更する: このチェックボックスをオンにすると、ターゲット プロジェクトの別のテスト スイートと名前が競合する場合、インポートするテスト スイートの名前が自動的に変更されます。
- 複製されたテスト スイート ファイルの名前を自動的に変更する: このチェックボックスをオンにすると、 ターゲット プロジェクトの別のテスト スイート ファイルと名前が競合する場合、インポートするテスト スイート ファイルの名前が自動的に変更されます。
注意 - 自動的な名前変更
テスト スイートまたはテスト スイート ファイルの名前が自動的に変更される場合、適切な情報がインポートされるテスト スイート ファイルに追加されます。例:
// Test suite was renamed by C++test - original name:
TestSuite_XX
// File was renamed by C++test - original file:
TestSuite_XX.cpp
名前の変更についての情報は C++test コンソールにも表示されます。 例:
Importing test suite "TestSuite_XX" ...
...warning, test suite "TestSuite_XX" already exists in the project.
Test suite renamed to "TestSuite_XX_1".
6. [終了] をクリックします。
テスト ケースのインポート中、進行状況が [コンソール] ビューに表示されます。進行状況の情報には、インポートされたテスト スイート、インポート中に発生した問題、およびインポートのサマリが含まれます。
インポート プロセスの最中、C++test は __CPTR_Construct_Argument を使って古いコンストラクターのテスト ケースをチェックします。発見された古いコンストラクターの呼び出しは、デフォルトのコンストラクター呼び出しに変更されます。テスト ケースには適切な情報が保持され、元のコードはコメント アウトされます。 警告メッセージが C++test コンソールに表示されます。インポートされたテスト スイート ファイルは、ユーザーがレビューするべきです。必要に応じて、異なるコンストラクターを使用するようにテスト ケースを変更してください。
ネイティブ テスト
ライセンスについての注意事項
適切なライセンス機能を有効にしている場合、C++test 2.3 / 6.x のネイティブ テストをインポートすることができます。ネイティブ テストに関連するすべての設定項目を有効にするには、このライセンスが必要です (たとえば、テスト ケース エクスプローラーの [新規追加] > [ネイティブ テスト] ショートカット メニュー、テスト コンフィギュレーションのオプション、C++test プロジェクト プロパティにおけるネイティブ テスト プロジェクト構成などです)。
C++test 6.x から C++test 10.x にネイティブ テストをインポートするには、次の操作を行います。
- C++test 6.x でテストされたすべてのソース ファイルを含むプロジェクトを新規作成します。詳細については「Creating a Project」 を参照してください。
- プロジェクトを適切に構成します。詳細については「プロジェクトとファイルのオプション設定」 を参照してください。
- 次の操作を行ってネイティブ テストをインポートします。
- [Parasoft] メニューの [ビューの表示] > [テスト ケース エクスプローラー] をクリックしてテスト ケース エクスプローラーを表示します。
- テストに追加するプロジェクトを右クリックし、ショートカット メニューの [新規追加] > [ネイティブ テスト] をクリックします。
- 表示されたファイル選択用ダイアログで、ネイティブ テストを格納した C++test6.x プロジェクト ファイル (.cpf ファイル) を選択し、[開く] ボタンをクリックします。
既存のネイティブ テストが [テスト ケース エクスプローラー] ビューに自動的に追加されます。ネイティブ テストは次の階層で表示されます。
[NewProject]
[Native Tests (OldProject.cpf)]
[File1.cpp]
[Class1]
[Function1]
[TestCase1]
[TestCase2]
テストの更新
新しいテスト ケースは、C++test 10.x の機能を使って追加するべきです。ネイティブ テスト ケースを変更する必要がある場合、C++test 6.x で変更してから、テスト ケース エクスプローラーをリフレッシュして同期を取ることができます。
テストの実行
現行バージョンの C++test でネイティブ テストを実行するには、次の操作を行います。
- まだ作成していない場合、適切なテスト コンフィギュレーションを作成します。次の操作を行います。
- [Parasoft] メニューの [テストコンフィギュレーション] をクリックします。
- [ユーザー定義] ノードを右クリックし、ショートカット メニューの [インポート]をクリックします。
<INSTALL_DIR>/configs/NativeTests
の下にあるテスト コンフィギュレーションを選択して [開く] ボタンをクリックします。- C++test 2.3/6.x のインストール ディレクトリを指すよう
'CPPTEST_INSTALL_DIR'
環境変数を設定します。- たとえば、bash シェルで
export CPPTEST_INSTALL_DIR=....
コマンドを使用したり、あるいは Windows の場合、[コントロール パネル] > [システム] > [詳細設定] の [環境変数] ボタンをクリックし、システム環境変数を設定します。
- たとえば、bash シェルで
- テスト コンフィギュレーションの [実行] > [全般] タブで [実行コマンド]フィールドのコマンドライン パラメーターを検証し、必要に応じて修正します。
既存または新規のテスト コンフィギュレーションを変更してネイティブ テスト ケースを実行する
ネイティブ テストを実行するようテスト コンフィギュレーションを構成するには、次の操作を行います。
- [実行] タブで [テスト実行を有効にする] チェックボックスをオンにします。
- [実行] > [全般] タブで [レガシー ネイティブ テスト ケースを実行] チェックボックスをオンにします。
- [実行コマンド] フィールド ([レガシー ネイティブ テスト ケースを実行] の真下)で、C++test 2.3/6.x 実行モジュールへの適切なパスを指定します。
2.テスト ケース エクスプローラーで、実行するテストを選択します。
3.ネイティブ テストを実行するために作成したテスト コンフィギュレーションを実行します。
注意:
- ネイティブ テストは、(スタブ、データ ソース、テスト オブジェクトなどがある) オリジナルの環境を使って実行されます。
- C++test 10.x は、コマンドライン モードで C++test 6.x を自動的に起動します。
- C++test 10.x はテストと行カバレッジの結果を自動的にロードします。
- ネイティブ テストをそのオリジナルの環境で実行するには、オリジナルの C++test 6.x プロジェクトだけでなく、C++test 6.x も必要です。
- コマンドライン実行もサポートされます (指定の C++test 10.x プロジェクトに関連付けられたすべてのネイティブ テストが実行されます)。
結果の参照
ネイティブ テストの実行結果は、ソース テストと同じように表示されます。
- 実行の詳細を参照するには、テスト ケース エクスプローラーを使用します。次の項目が表示されます。
- 色分け表示された成功/ 失敗のステータス
- 実行の統計
- 検出された問題の詳細については、[品質タスク] ビューを参照します。次の項目が表示されます。
- 例外とスタック トレース
- 期待される値との不一致
- カバレッジの詳細については、[カバレッジ] ビューを参照します。次の項目が表示されます。
- ネイティブ テストの行カバレッジ
また、次の操作も行うことができます。
- コード エディターを開いて、カバーされた行/ カバーされなかった行を分析する。
- レポートを作成する。
- 結果を Team Server にパブリッシュしてチームで共有する
- 結果を DTP にパブリッシュする (「DTPとの接続」を参照)
制限事項
- ネイティブ テストは、選択したファイル、テスト スイート、またはプロジェクトに基づいて実行することができます。ネイティブ テストを個別に選択して実行することはできません。
- ネイティブ テストでは行カバレッジ データだけが取得されます。他のカバレッジ メトリクスは利用できません。
スタブ
C++test 6.x からユーザー スタブをインポートする方法は 2 つあります。すべてのユーザー スタブを 1 つのファイルにインポートする方法と、各 C++test 6.x テスト ユニットのユーザー スタブを個別のファイルにインポートする方法です。1 つのファイルにインポートする場合、重複するスタブ メソッドを見つけやすいよう、スタブはソートされます。個別のファイルにインポートする場合、C++test 6.x のテスト ユニット名がファイル名になります。
C++test 6.x プロジェクトからスタブをインポートするには、次の操作を行います。
1. ショートカット メニューの [新規] > [その他] をクリックします。 ウィザードが表示されます。
2.[C++test] > [C++test 6.x ユーザー スタブのインポート] を選択して [次へ] をクリックします。
3. [C++test 6.x プロジェクト ファイル] フィールドで 、C++test 6.x プロジェクト ファイルの場所を指定します。プロジェクト ファイルの拡張子は .cpf でなければなりません。
4. [インポートされるスタブの場所] フィールドにスタブを保存する場所を入力します。ドロップダウン メニューから値を選択し、すべてのスタブを 1 つのディレクトリにインポートするのか、指定の C++test 10.x テスト コンテキストのすべてのスタブを個別のサブディレクトリにインポートするのか、それとも指定の C++test 6.x テスト ユニットのすべてのスタブを個別のディレクトリにインポートするのかを選択します 。
ファイル スコープ モードで C++test 6.x の動作を C++test 10.x で再現する
ファイル スコープ モードで C++test 6.x の動作を C++test 10.x で再現する場合、[C++test9.x テスト コンテキストのすべてのスタブを個別のサブディレクトリにインポートする] オプションが特に有効なことがあります。このオプションを使ってスタブをインポートすると、特定の C++test 9.x テスト コンテキストのすべてのスタブが 1 つのディレクトリに配置されます。
ファイル スコープ テスト モードで適切なスタブがテストで必ず使用されるようにするには、次の操作を行います。
- [Run Unit Tests (File Scope)] テスト コンフィギュレーションをベースにしたユーザー定義テスト コンフィギュレーションを作成します。
- [実行] > [シンボル] タブの [ プロジェクト内の他のファイルのシンボルを使用]フィールドで、コンテキスト固有のスタブだけを使用するよう指定します。例:
${project_loc}/stubs/imported/${ctx_name}
このように指定すると、ファイル スコープ モードで foo.cpp ファイルをテストする場合、foo.cpp サブディレクトリにインポートされたスタブだけが使用されます。
5. [重複するスタブのインポート ストラテジ] で、1 つの関数に対する複数のスタブのインポート方法を選択します。たとえば、ある関数のスタブが複数の C++test 6.x テスト ユニットのコンテキストで定義されている場合などです。以下のオプションがあります。
- 重複するすべてのスタブをインポートする: 特別なアクションを実行することなく、1 つの関数のすべてのスタブをインポートします。
- 重複するスタブをコメントアウトする: 1 つの関数に対するスタブを 1 個だけインポートします。その関数の他のすべてのスタブは、インポート中にコメント アウトされます。
- 重複するスタブをマージする ( 同じ場所にインポートする場合): [インポートされるスタブの場所] の値を利用して、同じ関数に対する複数のスタブが 1 つのファイルに追加されます。C++test はすべてのスタブを 1 つのスタブ定義にマージしようとします。
6. 適切なテスト コンテキストでスタブが必ず使用されるようインポートされるテスト定義を変更するには、[スタブ定義と C++test 9.x のテスト コンテキストを接続するコードを挿入する] チェックボックスをオンにします。例:
// [...]
if (CppTest_IsCurrentContext("examples/ATM/Source Files/Account.cxx")) {
// [...]
このオプションは、[重複するスタブをマージする] を選択している場合に特に役立ちます。1 つのテスト定義が作成されます。このスタブ定義は、C++test 6.x スタブの動作に対応するテスト コンテキストごとに異なった動作を行います。スタブのデフォルトのパスは、スタブされた関数のオリジナルの定義を呼び出します。例:
double (::Account::CppTest_Stub_getBalance) () { if (CppTest_IsCurrentContext("/ATM/ATM/Account.cxx")) { //account } else if (CppTest_IsCurrentContext("/ATM/ATM/ATM.cxx")) { //atm } else { return getBalance(); } }
7. インポートされる各スタブ ファイルの先頭に特定のテキストを追加するには、[各スタブファイルの先頭にカスタム コードを挿入する] チェックボックスをオンにします。たとえば、インポートされるすべてのスタブ ファイルに、必要なヘッダー ファイルの #include ディレクティブを追加することができます。
8. 重複するスタブをコメント アウトするには、[重複するスタブをコメント アウトする] チェックボックスをオンにします。
9. [終了] をクリックします。
スタブのインポート中、進行状況が [コンソール] ビューに表示されます。進行状況の情報には、インポートされたスタブ、インポート中に発生した問題、およびインポートのサマリが含まれます。
C++test は、オリジナル ソース ファイル (C++test 6.x プロジェクトでスタブが作成されたファイル) から、インポートされるスタブ ファイルに #include ディレクティブを自動的にコピーします。
コマンドライン (cpptestcli) からの実行
C++test 6.x と C++test 10.x のコマンドラインの違いは次の表のとおりです。表中の「 x 」は、対応するコマンドがないことを表します。
C++test 6.x | C++test 10.x |
---|---|
-Zicpf (file), --Zinput_cpf_project (file) | -data (WORKSPACE_DIR) |
-Zocpf (file), --Zoutput_cpf_project (file) | x |
-Zdsp (file), --Zdsp_project (file) | x |
-Zvcproj (file), --Zvcproj_project (file) | x |
-Zdc (name), --Zdsp_config (name) | x |
-Zdc (name), --Zdsp_config (name) | x |
-Zmcl (param), --Zmake_command_line (param) | x |
-Ztf (name), --Ztest_file (name) | -resource (RESOURCE) |
-Zeh (name), --Zexport_harness (name) | x |
-Zrl (name), --Zread_logs (name) | x |
-Ztc (name), --Ztest_config (name) | -config (CONFIG_URL) |
-Zpc (name), --Zproject_config (name) | x |
-Zso (file), --Zsave_options (file) | x |
-Zitc (file), --Zimport_test_cases (file) | x |
-Zito (file), --Zimport_test_objects (file) | x |
-Zis (file), --Zimport_suppressions (file) | x |
-Zrf (file), --Zreport_file (file) | -report (REPORT_FILE) |
-Zgh (name), --Zgenerate_html (name) | -report (REPORT_FILE) |
-Zhrd (dir), --Zhtml_report_directory (dir) | -report (REPORT_FILE) |
-Zgx, --Zgenerate_xml | -report (REPORT_FILE) |
-Zxrd (dir), --Zxml_report_directory (dir) | -report (REPORT_FILE) |
-Zpr, --Zpublish_results | -publish, -publishteamserver |
-Zf, --Zforce | x |
-Zow {on\off}, --Zoverwrite {on\off} | x |
-Zoe [quiet], --Zonly_errors [quiet] | x |
-Zq, --Zquiet | x |
-Zvm(level), --Zverbosity_mode(level) | x |
-Zgrs {on\off}, --Zgrs {on\off} | -localsettings (LOCALSETTINGS_FILE) |
-Zga (name), --Zgrs_attribute (name) | -localsettings (LOCALSETTINGS_FILE) |
-Zcs, --Zcompile_source | x |
-Zrs, --Zreread_symbols | x |
-Zlc (param), --Zlist_config (param) | x |
-Zecf, --Zexpand_command_files | x |
-Znt --Zno_tests | x |
-h, --help | -help |
-V, --version | -version |
x | -nobuild |
x | -showdetails |
x | -appconsole stdout |