このセクションの内容

概要

C/C+test  は、CppUnit または CppUtest で実行されたテストの結果を DTP Server にレポートするだけでなく、コード カバレッジとテストを関連付けることができます。CppUnit または CppUtest を C/C++test と統合するには、既存の CppUnit または CppUtest のインフラストラクチャに、結果リスナーとカバレッジ アノテーターをインストールする必要があります。

一般的な統合は結果リスナーとカバレッジ アノテーターの両方を含み、テスト結果とカバレッジについて完全な情報を得ることができます。また、簡単なテストの場合や、カバレッジがある結果とない結果を比較する場合、結果リスナーだけをインストールすることもできます。

テストのセットアップへの C/C++test のインストール

このセクションでは、CppUnit と CppUtest のセットアップに結果リスナーとカバレッジ アノテーターの両方をインストールする方法について説明します。結果リスナーだけをインストールする場合は、カバレッジ アノテーターについて説明している箇所を飛ばして読んでください。

CppUnit のセットアップに  C/C++test をインストールする

  1. CppUnit の main 関数があるソース ファイルで、適切なヘッダー ファイルをインクルードします。

    #include "cpptest/extensions/cppunit/results_listener.h"
    #include "cpptest/extensions/cppunit/coverage_annotator.h"
  2. 結果リスナーをインストールします。インストールの詳細は、単体テストを実行するために使用する 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);
  3. ビルド システム構成を変更して、-I オプションで results_listener.h ヘッダー ファイルの場所を指定します。

    -I<C++test Installation Directory>/runtime/include 

CppUtest のセットアップに C/C++test をインストールする

  1. CppUtest の main 関数があるソース ファイルで、適切なヘッダー ファイルをインクルードします。

    #include "cpptest/extensions/cpputest/results_listener.h"
    #include "cpptest/extensions/cpputest/coverage_annotator.h"
    #include "cpptest/extensions/cpputest/test_runner.h"
  2. 結果リスナーをインストールします。このインストールでは、カバレッジ アノテーターと結果リスナーを TestRegistry に登録する必要があります。また、C/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;
    
    
  3. ビルド システム構成を変更して、-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



  • No labels