このセクションの内容:
C++test は、VxWorks リアル タイム プロセス プロジェクトおよびダウンロード可能カーネル モジュール プロジェクトを直接テストすることができます。このセクションでは、VxWorks リアル タイム プロセス プロジェクトの設定方法について説明します。
プロジェクトの設定を開始する前に、次の操作が必要です。
-DCPPTEST_THREADS=1
" を指定する必要があります。 ここでは具体的に例をあげて Workbench から C++test を使って単体テストを実行する方法を説明します。プロジェクトの作成から単体テスト結果のレビューまで、単体テスト フレームワークのセットアップの全プロセスを説明します。C++test の Examples ディレクトリの Timer ソース コード (<C++test installation directory>/Examples/Timer) を使用します。
プロジェクトを作成します。次の操作を行います。
テスト対象のプロジェクトにソース コードを追加します。ソース ファイルは、リンクされたディレクトリとして追加できます。
リンクされたディレクトリとしてソース ファイルを追加する必要は必ずしもありません。Workbench で可能な任意の方法で追加できます。 |
プロジェクトのテスト ケースを生成する前に、プロジェクトを適切にセットアップしてビルド可能な状態にしなければなりません。次のように Wind River ビルド ターゲットを定義する必要があります。
C++test を使って単体テストを実行するプロジェクトのためのビルドを構成している場合、 メイン プロジェクト ディレクトリの下に C++test 生成テスト コンポーネントが作成される点に注意してください。メイン プロジェクト ディレクトリの下の C++test 生成ディレクトリ ( tests やstubs など) を除外するようにビルド構成を行って、テスト コンポーネントがプロジェクト ビルドに入らないようにする必要があります。そうしないと、C++test がテスト ケースを生成した後にオリジナル アプリケーションのビルドを開始したときに、生成されたテスト ケースをコンパイルしようとしてビルドが高い確率で失敗します。 C++test 生成テスト コンポーネントは、テスト プロセス中に C++test が管理するコンポーネントです。オリジナル アプリケーションの一部としては設計されていません。 Standard ビルドをサポートするプロジェクトの場合、C++test はオリジナルのビルドから C++test 生成テスト コンポーネントを自動的に除外します。特に操作は必要ありません。Flexible ビルドをサポートするプロジェクトの場合は、自動的な除外はサポートされていないため、手動で除外する必要があります。 ビルドから C++test 生成ディレクトリを除外するには、次の操作を行います。
|
プロジェクトを VxWorks リアル タイム プロセス (アプリケーション) にビルドできたら、テスト ケースの自動生成を開始できます。次の操作を行います。
C++test はコンパイル オプションをスキャンしてテスト ケースを生成します。C++test の [テスト進捗] ビューに生成サマリが表示されます。[テスト進捗] ビューを閉じると、新しい tests ディレクトリがプロジェクト ツリーに追加されたことがわかります。自動生成テスト ケースはこの tests ディレクトリの下にあります。
生成したテスト ケースは実行モジュール アプリケーションにビルドする必要があります。 このプロセスは C++test とその内部ビルダーによって完全に管理されます。デフォルトで、C++test には Wind River Workbench 環境で動作するように設定済みのテスト コンフィギュレーションが用意されています。[ビルトイン] > [Embedded Systems] > [Wind River Workbench] カテゴリにある次のテスト コンフィギュレーションです。
ファイル通信チャネル (PassFS または TSFS のテスト コンフィギュレーション) を選択する場合、結果ファイルが生成されるパスの設定が必要なことがあります。デフォルトでは、C++test は次のパスを使って結果を格納します。
testLogFile="/tgtsvr/cpptest_results.tlog"
covLogFile="/tgtsvr/cpptest_results.clog"
testLogFile="host:${cpptest:testware_loc}/cpptest_results.tlog" covLogFile="host:${cpptest:testware_loc}/cpptest_results.clog"
これらのパスを変更するには、次の操作を行います。
テスト実行フローが [カスタム フロー] ダイアログに表示されます。この時点で、通信チャネル定義を制御するフロー ステップを変更できます。
通常このステップは次のように定義されています。
<TestRunnerGenerationStep testSuiteConfigFile="${cpptest:testware_loc}/testsuites.xml" testrunnerCFile="${cpptest:testware_loc}/cpptest_testrunner.c" testrunnerCppFile="${cpptest:testware_loc}/cpptest_testrunner.cpp" testLogFile="/tgtsvr/cpptest_results.tlog" covLogFile="/tgtsvr/cpptest_results.clog" appendLogs="false" / > |
使用しているシステムによって、パス形式または最終的なファイルの場所が異なる場合、 testLogFile 属性と covLogFile 属性の値を変更して、ここで設定を変更できます。ほとんどの場合、TSFS と PassFS のデフォルト値のままで問題ありません。
必要な変更がすべて終わったら、目的のテスト実行フローを定義したユーザー定義テスト コンフィギュレーションを実行することができます。テスト コンフィギュレーションの実行が終了すると、テスト用の実行可能なバイナリ ファイルが作成されます。このバイナリ ファイルをターゲット デバイスまたはシミュレーターで起動すると、テスト コンフィギュレーションの <TestRunnerGenerationStep> タグの定義に従って、結果ファイルが生成されます。
次のステップは、結果を収集して C++test の結果ビューにロードすることです。そのために、[ビルトイン] > [Utilities] > [Load Test Results (Files)] テスト コンフィギュレーションを利用できます。ただし、結果ファイルを指すようこのテスト コンフィギュレーションのパスを変更しなければならない場合があります。一般的に、テストのビルドに使用するテスト コンフィギュレーションの以下のフロー ステップで指定されたパスと、read logs file タグのパスとを確実に同期させる必要があります。
<TestRunnerGenerationStep testSuiteConfigFile="${cpptest:testware_loc}/testsuites.xml" testrunnerCFile="${cpptest:testware_loc}/cpptest_testrunner.c" testrunnerCppFile="${cpptest:testware_loc}/cpptest_testrunner.cpp" testLogFile="cpptest_results.tlog" covLogFile="cpptest_results.clog /> |
以下は [Load Test Results (Files)] テスト コンフィギュレーションのテスト実行フロー定義の一部です。
<ReadTestLogStep testLogFile="cpptest_results.tlog" timeoutInfoProperty="test_exec_timeouted" /> <ReadDynamicCoverageStep covLogFile="cpptest_results.clog" /> |
システムがテスト用の実行可能ファイルを自動的に実行できる場合、ビルドだけではなく実行ファイルの実行と結果の収集も行うよう、テスト バイナリをビルドするためのテスト実行フローを拡張することができます。そうすれば、テスト ループ全体を自動化できます。
結果が正常に Workbench にロードされたら、結果を解析し、レポートを生成し、適宜テスト ケースを変更することができます。 詳細については次のセクションを参照してください。
単体テストの詳細については 「テストの作成と実行」を参照してください。
ソケット通信チャネルを選択する場合、テスト結果の送信に使用するホスト IP アドレスとポート番号の変更が必要なことがあります。
テスト実行フローが [カスタム フロー] ダイアログに表示されます。
この時点で、通信チャネル定義を制御するフロー ステップを変更できます。このステップは通常次のように定義されています。
<TestRunnerWithSocketsGenerationStep
testSuiteConfigFile="${cpptest:testware_loc}/testsuites.xml"
testrunnerCFile="${cpptest:testware_loc}/cpptest_testrunner.c"
testrunnerCppFile="${cpptest:testware_loc}/cpptest_testrunner.cpp"
resultsHost="127.0.0.1"
testLogPort="2567"
covLogPort="2568"
/ >
ネットワーク構成に合わせて、ホスト IP アドレス ( C++test を使用する開発環境が実行中のマシン) およびポート番号を変更します。
必要なすべての変更を加えたら、カスタマイズしたテスト コンフィギュレーションを実行できます。テスト コンフィギュレーションの実行が終了すると、テスト用実行モジュールのバイナリ ファイルが生成されます。テスト用実行モジュールを起動する前に、 [ビルトイン] > [Utilities] > [Load Test Results (Sockets)] テスト コンフィギュレーションを実行します。そしてターゲット デバイスまたはシミュレーターでテスト用実行モジュールを起動すると、テスト結果とカバレッジ データを送信するための 2 つのポートがオープンします。
ソケット通信チャネルを介して結果を収集するには、テスト用実行モジュールを起動する前に [ビルトイン] > [Utilities] > [Load Test Results (Sockets)] テスト コンフィギュレーションを実行する必要があります。そうしないと、指定ポートでテスト結果の受信を待ち続けてテスト コンフィギュレーションがハングします。テスト結果の収集は、Java で作成された単純なリスニング エージェントによって実行されます。このリスニング エージェントは指定ポートをリッスンして指定ポートからファイルにデータを記述できます。 このリスニング エージェントのソース コードおよびコンパイルされたモジュールは次の場所にあります。
|
テスト結果が Workbench に正常にロードされたら、テスト結果の解析、レポートの生成、およびテスト ケースの変更を行うことができます。詳細については次のセクションを参照してください。
単体テストの詳細については 「テストの作成と実行」を参照してください。
ビルドされたテストモジュールを実行するには、[ビルトイン] > [Embedded Systems] > [Wind River] > [Workbench] > [Load and Run VxWorks Test Executable (RTP)] テスト コンフィギュレーションを実行してから、[ビルトイン] > [Utilities] > [Load Test Results (Files)] テスト コンフィギュレーションを実行します。
アプリケーションをビルドし、アプリケーション モードで実行するには、ライブラリ シンボルの抽出を除くすべてのステップが含まれている [ビルトイン] > [Embedded Systems] > [Wind River] > [Workbench] > [Run VxWorks Application with Mem Monitoring - RTP] テスト コンフィギュレーションを実行します。PassFS 用と TSFS 通信用のコンフィギュレーションがあります。
C++test には、VxWorks ダウンロード可能カーネル モジュール (DKM) のテストに特化した 2 つのテスト コンフィギュレーションが用意されています。
PassFS は、 VxWorks シミュレーター (VxSim) でのみ使用でき、ホストのファイル システムへの直接アクセスを提供します。TSFS はターゲット サーバーの機能を使ってホスト ファイル システムおよび Target Agent <-> Target Server WTX チャネルに通信のためにアクセスします。TSFS はリアル ターゲットでも使用できます。
Workbench に関連するすべてのテスト実行フローには、初期設定が必要なプロパティがあります。たとえば、使用したいツール チェーンや Wind River Shell 実行モジュールなどです。コメントに従って定義済みのオプションから選択することも、ニーズに合わせて値を再定義することもできます。テスト中に、最初の echo ステップによって、プロパティの設定をユーザーにリマインドするコンソール メッセージが表示されます。
Windows ホストで PassFS 通信を使用する場合、結果ログのパスに接頭辞として host を付ける必要があります。TSFS 通信を使用する場合は /tgtsvr/ 接頭辞を付けます。 VxWorks の機能の詳細については Wind River Workbench のドキュメントを参照してください。 |
DKM プロジェクトは、簡単なテストを実行することも、完全な単体テストを実行することもできます。
このテストでは、スタブの自動生成および未解決シンボルの詳細レポートはできませんが、外部シンボル リストの生成が必要ありません。そのため、より少ない労力でテストを開始できます。
次の操作を行います。
完全な単体テストを実行できますが、テスト モジュールの作成時に外部シンボル リストが必要です。外部シンボル リストには、DKM 内部で使用される VxWorks イメージからのすべてのエクスポートあるいは定義されたカーネル スペース シンボルがなければなりません。
外部シンボル リストの作成方法の詳細については、「外部シンボル リストの作成」を参照してください。
この方法でテスト用実行モジュールをビルドするには、デフォルトの [ビルトイン] > [Embedded Systems] > [Wind River] > [Workbench] > [Build VxWorks Test Module - DKM (PassFS または TSFS)] テスト コンフィギュレーションを使用します。
ビルドされたテスト モジュールを実行するには、[ビルトイン] > [Embedded Systems] > [Wind River] > [Load and Run VxWorks Test Object] テスト コンフィギュレーションを使用します。Wind River Shell を使ってテスト オブジェクトが起動されます。
テスト結果を読むには、[Utilities] > [Load Test Results (Files)] テスト コンフィギュレーションを使用します。
期待されるテスト結果を得るには、テスト実行フローのカスタマイズが必要な場合があります。テスト実行フローの詳細については 「テスト実行フローのカスタマイズ」を参照してください。 |
アプリケーションをビルドし、アプリケーション モードで実行するには、ライブラリ シンボルの抽出を除くすべてのステップが含まれている [ビルトイン] > [Embedded Systems] > [Wind River] > [Workbench] > [Run VxWorks Application with Mem Monitoring - DKM] テスト コンフィギュレーションを実行します。PassFS 用と TSFS 通信用のコンフィギュレーションがあります。
エントリ ポイント名が main ではない場合、エントリ ポイントに合わせて設定を変更します。テスト コンフィギュレーションを修正し、C++test プロパティ パネルの [Other Settings] > [Advanced] オプションに "edg.pMainFunctionName <entry_name>
" を追加します。
C++test はこの環境での直接的なテスト ケース デバッグをサポートしていません。
オリジナル/テスト対象プロジェクトに合った適切なデバッグ/起動構成を使ってテスト用実行モジュールをロードし、目的のテスト ケースに手動でブレークポイントを設定してください。