このセクションの内容
概要
C/C+test は、CppUnit または CppUtest で実行されたテストの結果を DTP Server にレポートするだけでなく、コード カバレッジとテストを関連付けることができます。CppUnit または CppUtest を C/C++test と統合するには、既存の CppUnit または CppUtest のインフラストラクチャに、結果リスナーとカバレッジ アノテーターをインストールする必要があります。
一般的な統合は結果リスナーとカバレッジ アノテーターの両方を含み、テスト結果とカバレッジについて完全な情報を得ることができます。また、簡単なテストの場合や、カバレッジがある結果とない結果を比較する場合、結果リスナーだけをインストールすることもできます。
テストのセットアップへの C/C++test のインストール
このセクションでは、CppUnit と CppUtest のセットアップに結果リスナーとカバレッジ アノテーターの両方をインストールする方法について説明します。結果リスナーだけをインストールする場合は、カバレッジ アノテーターについて説明している箇所を飛ばして読んでください。
CppUnit のセットアップに C/C++test をインストールする
CppUnit の main 関数があるソース ファイルで、適切なヘッダー ファイルをインクルードします。
#include "cpptest/extensions/cppunit/results_listener.h" #include "cpptest/extensions/cppunit/coverage_annotator.h"
結果リスナーをインストールします。インストールの詳細は、単体テストを実行するために使用する CppUnit フレームワークの TestRunner クラスによって異なります。単純なセットアップの場合、変更後の main 関数は以下に似たものになるでしょう。
/* required header files */ int main() { CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest(); CPPUNIT_NS::TextUi::TestRunner runner; runner.addTest( suite ); CppTest_CppUnitResultsOutputter cpptestResListener; CppTest_CppUnitCoverageAnnotator cpptestCovAnnotator; runner.eventManager().addListener( &cpptestResListener ); runner.eventManager().addListener( &cpptestCovAnnotator ); runner.setOutputter( new CPPUNIT_NS::CompilerOutputter( &runner.result(), std::cout)); bool wasSucessful = runner.run(); return wasSucessful ? 0 : 1;
使用したクラスによって、変更のインストールが異なることがあります。以下の例は、 CppUnit フレームワークの 2 つのクラスのインストールを示しています。
CppUnit::TestRunner クラスのインストールCppUnit::TestResult controller; CppTest_CppUnitResultsListener cpptestResListener; CppTest_CppUnitCoverageAnnotator cpptestCovAnnotator; controller.addListener( &cpptestResListener ); controller.addListener( &cpptestCovAnnotator ); CppUnit::TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); runner.run( controller, testPath );
CppUnit::TextTestRunner クラスのインストール:
CppUnit::TextTestRunner runner; CppTest_CppUnitResultsListener cpptestResListener; CppTest_CppUnitCoverageAnnotator cpptestCovAnnotator; runner.eventManager().addListener(&cpptestResListener); runner.eventManager().addListener(&cpptestCovAnnotator);
ビルド システム構成を変更して、
-I
オプションで results_listener.h ヘッダー ファイルの場所を指定します。-I<C++test Installation Directory>/runtime/include
CppUtest のセットアップに C/C++test をインストールする
CppUtest の main 関数があるソース ファイルで、適切なヘッダー ファイルをインクルードします。
#include "cpptest/extensions/cpputest/results_listener.h" #include "cpptest/extensions/cpputest/coverage_annotator.h" #include "cpptest/extensions/cpputest/test_runner.h"
結果リスナーをインストールします。このインストールでは、カバレッジ アノテーターと結果リスナーを TestRegistry に登録する必要があります。また、C++test の TestRunner の使用も必要です。単純なセットアップの場合、変更後の main 関数は以下に似たものになるでしょう。
/* required header files */ int main() { // Register C++Test cpputest plugins TestRegistry* registry = TestRegistry::getCurrentRegistry(); TestPlugin* coverageAnnotator = new CppTest_CppUtestCoverageAnnotator(); registry->installPlugin(coverageAnnotator); TestPlugin* resultsListener = new CppTest_CppUtestResultsListener(); registry->installPlugin(resultsListener); // run the tests int result = CppTest_CppUtestTestRunner::RunAllTests(ac, av); delete coverageAnnotator; delete resultsListener; return result;
ビルド システム構成を変更して、
-I
オプションで results_listener.h ヘッダー ファイルの場所を指定します。-I<C++test Installation Directory>/runtime/include
CppUnit と CppUtest のテスト結果のレポート
結果リスナーは、単体テストの実行結果を記録し、データをファイルに保存することができます。デフォルトでは、実行結果は現行の作業ディレクトリの cpptest_results.utlog ファイルに保存されます。CppTest_CppUnitResultsListener (CppUnit) または CppTest_CppUtestResultsListener (CppUtest) コンストラクターに引数としてパスを渡すことで、デフォルトのファイルの場所を変更できます。
CppUnit の場合
CppTest_CppUnitResultsListener cpptestResListener("c:/myworkspace/cpptest_results.utlog");
CppUtest の場合
CppTest_CppUtestResultsListener cpptestResListener("c:/myworkspace/cpptest_results.utlog");
別の方法として、以下の定義を使用して、テスト ハーネスのビルド処理中にファイルの場所を指定できます。
-DCPPTEST_UT_LOG_FILE=\"c:/home/my_workspace/cpptest_results.utlog\"
デフォルトのファイルの場所を変更する場合、ファイル拡張子 .utlog
を残すことが重要です。
一度結果リスナーと共にテスト実行をビルドしたら、定期的に単体テストを実行することができます。標準のセットアップでは、テストの実行中に生成された cpptest_results.utlog ファイルは、実行モジュールと同じディレクトリに保存されます。ファイル パスを変更した場合、ファイルは指定の場所に作成されます。
単体テストの実行結果は、DTP Server にパブリッシュできます。あるいは、以下のコマンドラインによってローカル レポートを生成できます。
cpptestcli -config "builtin://Unit Testing" -input <result_filename>.utlog -publish -report local_report
レポートの設定とパブリッシュの詳細については、「結果の参照」 を参照してください。
通常、単体テストの実行結果はコード カバレッジの結果と組み合わされます。
テストとコード カバレッジの関連付け
コード カバレッジの結果には、テストの開始/停止情報を自動的に追加することができます(詳細については「結果ストリームへのテスト開始/終了情報の付加」 を参照してください)。そのため、特定のテストまたはテスト集合によって生成されたコード カバレッジを選択して解析できます。テストとコード カバレッジを関連付けるには、カバレッジ アノテーターと結果リスナーの両方を C/C++test と共にインストールする必要があります。
カバレッジ アノテーターは、コード カバレッジの結果のストリームに特別なマーカーを追加します。このマーカーは、テスト ケースごとにカバレッジ結果を区切ります。カバレッジ アノテーターはカバレッジ結果ファイルにマーカーを追加し、この処理は C/C++test によって管理されます。カバレッジ アノテーターは入力パラメーターを必要としません。
一度結果リスナーと共にテスト用実行モジュールをインストールすれば、定期的に単体テストを実行できます。テストの実行中に生成された cpptest_results.clog ファイルと cpptest_results.utlog ファイルが現行の作業ディレクトリに保存されます。
以下のコマンドを実行すると、ローカル レポートを生成し、DTP Server 上でコード カバレッジを選択して解析することができます。
cpptestcli -config "builtin://Unit Testing" -input cpptest_results.utlog -input cpptest_results.clog -publish -report local_report