このセクションでは、手動で作成された既存の CppUnit テスト ケースを実行する方法について説明します。C/C++test で CppUnit テスト ケースを実行すると、単体テストとレポートを集約できます。C/C++testのレポートと作成者の算定機能は、開発チームがテスト ケースの失敗を追跡して、いつ誰が失敗の原因を作ったかを特定するのに役立ちます。
開発チームは、コマンドライン モードで毎晩テストを実行できます。開発者は、毎朝テストの実行結果をインポートして、自分が変更したコードによって既存の機能が破損していないかを素早くチェックできます。回帰テストが失敗している場合、その失敗に責任のある開発者が特定されるため、チーム メンバー全員が同じ回帰テスト エラーのリストをチェックする場合に較べて、エラーの修正プロセスが格段に能率的になります。
さらに、C/C++test は CppUnit テスト ケースのテスト カバレッジ情報を収集できるほか、実行時エラー検出を行うことができます。
このセクションの内容 :
テストへのアクセス
手動で作成された既存の CppUnit テスト ケースにアクセスするように C/C++test を設定するには、次の操作を行います。
- [C/C++ プロジェクト] ビューで、CppUnit テスト ケース ファイルがあることを確認します。
- [C/C++ プロジェクト] ビューから見える場所であれば、テスト ディレクトリはどこでも構いません。デフォルトでは、テストはプロジェクトの tests ディレクトリの下に保存されます。この保存場所はテスト コンフィギュレーションで変更できます。 [実行] > [全般] タブの [テスト スイート ファイルの場所のパターン] オプションで設定します。
- プロジェクト ディレクトリ中にテストを格納したくない場合、フォルダーを追加して、システム上の他の場所にあるファイルにリンクできます。
- [ファイル] メニューの [新規] > [その他] をクリックします。
- [一般] の [フォルダー] を選択して [次へ] ボタンをクリックします。
- [拡張] ボタンをクリックします。
- [ファイル システム内のフォルダーにリンク] チェックボックスをオンにします。
- リンクするファイルの場所を入力します。
- [終了]ボタンをクリックします。
- [Parasoft] メニューの [テスト コンフィギュレーション] をクリックします。
- CppUnit テストを実行するユーザー定義テスト コンフィギュレーションを選択します。
- [実行] タブをクリックします。
- C/C++test が CppUnit テストの場所を認識してテストできるように、[全般] タブの [テスト スイート ファイルの場所のパターン] オプションを必要に応じて変更します。
- ディレクトリ パスの最後に必ずアスタリスク (*) を追加してください。
- [適用] ボタンをクリックして設定を保存します。
このテスト コンフィギュレーションを使ってテストを実行すると、レガシー テストが実行されます。
要件と制限事項
インポートされたテスト ケースは、次の条件を満たす必要があります。
- CppUnit テスト クラスは、その基底クラスとして CPPUNIT_NS::TestFixture または CPPUNIT_NS::TestCase を持たなければなりません。
- CppUnit テスト クラスはテンプレート クラスになることはできません。
- CPPUNIT_TEST_SUITE_REGISTRATION(TestSuiteName) マクロは、CppUnit ソース ファイル (.cpp) に挿入されなければなりません。
- 次の CppUnit マクロがサポートされています。
- CPPUNIT_TEST_SUITE(ATestFixtureType)
- CPPUNIT_TEST_SUITE_END()
- CPPUNIT_TEST_SUITE_NAMED_REGISTRATION
- CPPUNIT_TEST(testMethod)
- CPPUNIT_TEST_EXCEPTION(testMethod, ExceptionType)
- CPPUNIT_TEST_FAIL(testMethod) CPPUNIT_ASSERT(condition)
- CPPUNIT_ASSERT_MESSAGE(message, condition)
- CPPUNIT_FAIL(message)
- CPPUNIT_ASSERT_EQUAL(expected, actual)
- CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)
- CPPUNIT_ASSERT_THROW(expression, ExceptionType)
- CPPUNIT_ASSERT_NO_THROW(expression)
- CPPUNIT_TEST_SUITE_REGISTRATION(ATestFixtureType)
- インポートされた CppUnit テスト ケースのコンテキストは project に設定されます。
ビルドからのテスト ケースの除外
CppUnit ファイルがビルドから除外されていない場合、次の処理が実行されます。
- テスト ファイルに対して静的解析が実行されます。
- テスト ファイルからのカバレッジがレポートされます。
- テスト ファイル中で関数呼び出しがスタブ化されます。
- テスト ファイルに対して自動生成テストが生成されます。
したがって、ビルドから CppUnit ファイルを除外することを推奨します。ただし、これは必須ではありません。
ビルドから CppUnit ファイルを除外する方法は、プロジェクトのオプション ソースによって異なります。オプション ソースは、プロジェクト プロパティの [Parasoft] > [C/C++test] > [ビルド設定] で設定されます。
- プロジェクトを [ビルド システムのオプションを使用] に設定している場合、 CppUnit メソッド定義を持つソース ファイルを右クリックしてショートカット メニューの [プロパティ] をクリックし、[C/C++ ビルド] の [ビルドから除外] チェックボックスをオンにします。そして、CppUnit クラスを持つヘッダー ファイルに対して、同じ操作を繰り返します。
- プロジェクトを [すべてのオプションを手動で指定] に設定している場合、CppUnit メソッド定義を持つソース ファイルを右クリックしてショートカット メニューの [プロパティ] をクリックし、[Parasoft] > [C/C++test] > [ビルド設定] の [ビルドから除外] チェックボックスをオンにします。そして、CppUnit クラスを持つヘッダー ファイルに対して、同じ操作を繰り返します。
- その他のオプション ソースについては、そのビルド オプションが元のビルド システム (Makefile や .dsp など) で利用できない場合にだけ、ファイルがビルドから除外されます。たとえば、C++test に付属の ATM プロジェクトを開くと、CppUnit テスト スイートはビルドから自動的に除外されます。CppUnit テスト スイートは ATM プロジェクトの Makefile の一部ではないからです。