Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Table of Contents
maxLevel1

VxWorks RTP プロジェクトのテスト

C++test は、VxWorks リアル タイム プロセス プロジェクトおよびダウンロード可能カーネル モジュール プロジェクトを直接テストすることができます。このセクションでは、VxWorks リアル タイム プロセス プロジェクトの設定方法について説明します。

前提条件

プロジェクトの設定を開始する前に、次の操作が必要です。

  1. C++test ランタイム ライブラリをビルドします  
  2. リンカー オプションにライブラリを追加します。それには、プロジェクトのプロパティ設定画面を表示し、[Parasoft] > [C++test] > [ビルド設定] を選択します。そして、[リンカー オプション] で C++test ランタイム ライブラリへのパスを追加します。  
  3. マルチスレッド アプリケーションのテストをサポートするようランタイム ライブラリをビルドするには、"-DCPPTEST_THREADS=1" を指定する必要があります。  

単体テストの例

ここでは具体的に例をあげて Workbench から C++test を使って単体テストを実行する方法を説明します。プロジェクトの作成から単体テスト結果のレビューまで、単体テスト フレームワークのセットアップの全プロセスを説明します。C++test の Examples ディレクトリの Timer ソース コード (<C++test installation directory>/Examples/Timer) を使用します。

プロジェクトを新規作成する

プロジェクトを作成します。次の操作を行います。

  1. [ファイル] メニューの [New] > [VxWorks Real Time Process Project] をクリックします。  
  2. プロジェクト名として「Timer」と入力します。  
  3. 次の画面で [Flexible] ビルド サポートを選択します。  
  4. ビルド コマンドラインに "-B" フラグを追加すると、オプションのスキャンが容易になります。詳細については 「重要な注意 - すべてのターゲットを強制的にビルドするには」を参照してください。  
  5. ビルド仕様を選択します。この例では SIMPENTIUMgnu_RTP を使用します。  
  6. プロジェクトのセットアップを完了します。  

ソース ファイルをプロジェクトに追加する

テスト対象のプロジェクトにソース コードを追加します。ソース ファイルは、リンクされたディレクトリとして追加できます。

...

Note
title注意

リンクされたディレクトリとしてソース ファイルを追加する必要は必ずしもありません。Workbench で可能な任意の方法で追加できます。

ビルド ターゲットを定義する

プロジェクトのテスト ケースを生成する前に、プロジェクトを適切にセットアップしてビルド可能な状態にしなければなりません。次のように Wind River ビルド ターゲットを定義する必要があります。

...

Info
title重要な注意 ! C++test 生成ディレクトリをオリジナル ビルド プロセスに入れてはいけない

C++test を使って単体テストを実行するプロジェクトのためのビルドを構成している場合、 メイン プロジェクト ディレクトリの下に C++test 生成テスト コンポーネントが作成される点に注意してください。メイン プロジェクト ディレクトリの下の C++test 生成ディレクトリ ( tests やstubs など) を除外するようにビルド構成を行って、テスト コンポーネントがプロジェクト ビルドに入らないようにする必要があります。そうしないと、C++test がテスト ケースを生成した後にオリジナル アプリケーションのビルドを開始したときに、生成されたテスト ケースをコンパイルしようとしてビルドが高い確率で失敗します。

C++test 生成テスト コンポーネントは、テスト プロセス中に C++test が管理するコンポーネントです。オリジナル アプリケーションの一部としては設計されていません。

Standard ビルドをサポートするプロジェクトの場合、C++test はオリジナルのビルドから C++test 生成テスト コンポーネントを自動的に除外します。特に操作は必要ありません。Flexible ビルドをサポートするプロジェクトの場合は、自動的な除外はサポートされていないため、手動で除外する必要があります。

ビルドから C++test 生成ディレクトリを除外するには、次の操作を行います。

  1. 除外するディレクトリを選択して右クリックします。  
  2. [Exclude from build target] をクリックします。

テスト ケースを生成する

プロジェクトを VxWorks リアル タイム プロセス (アプリケーション) にビルドできたら、テスト ケースの自動生成を開始できます。次の操作を行います。

...

C++test はコンパイル オプションをスキャンしてテスト ケースを生成します。C++test の [テスト進捗] ビューに生成サマリが表示されます。[テスト進捗] ビューを閉じると、新しい tests ディレクトリがプロジェクト ツリーに追加されたことがわかります。自動生成テスト ケースはこの tests ディレクトリの下にあります。

テストをビルドする

生成したテスト ケースは実行モジュール アプリケーションにビルドする必要があります。 このプロセスは C++test とその内部ビルダーによって完全に管理されます。デフォルトで、C++test には Wind River Workbench 環境で動作するように設定済みのテスト コンフィギュレーションが用意されています。[ビルトイン] > [Embedded Systems] > [Wind River Workbench] カテゴリにある次のテスト コンフィギュレーションです。

  • Build VxWorks Test Executable - RTP (PassFS) 既存のテスト ケースを収集し、スタブ コンフィギュレーションを解析し、テスト インストゥルメントを準備し、テスト用実行モジュールをビルドし、Wind River の Pass-through File System (PassFS) 通信チャネルを介してテスト結果を送信しようとします ( つまり、テスト用実行モジュールは標準の ANSI C ファイル入出力関数を使ってファイル システムに結果を生成します。) このファイル通信チャネルは、VxWorks シミュレーター (VxSim) でのみ動作します。  
  • Build VxWorks Test Executable - RTP (Socket) 既存のテスト ケースを収集し、スタブ コンフィギュレーションを解析し、テスト インストゥルメントを準備し、テスト用実行モジュールをビルドして TCP/IP ソケット通信チャネルを介してテスト結果を送信しようとします。 (つまり、テスト用実行モジュールは 2 つのポートを開きます。1 つはテスト データ用のポート、もう 1 つはカバレッジ データ用のポートです。そして、このチャネルを使ってテスト結果を送信しようとします。)  
  • Build VxWorks Test Executable - RTP (TSFS) これは [Build VxWorks Test Executable - RTP (PassFS)] テスト コンフィギュレーションに似ていますが、Wind River の Target Server File System (TSFS) 通信チャネルを使用する点が異なります。「リアル」ターゲットでも使用されることがあります。  

ファイル通信チャネルを使用する

ファイル通信チャネル (PassFS または TSFS のテスト コンフィギュレーション) を選択する場合、結果ファイルが生成されるパスの設定が必要なことがあります。デフォルトでは、C++test は次のパスを使って結果を格納します。

...

結果が正常に Workbench にロードされたら、結果を解析し、レポートを生成し、適宜テスト ケースを変更することができます。 詳細については次のセクションを参照してください。

単体テストの詳細については 「テストの作成と実行Test Creation and Execution」を参照してください。

ソケット通信チャネルを使用する

ソケット通信チャネルを選択する場合、テスト結果の送信に使用するホスト IP アドレスとポート番号の変更が必要なことがあります。

...

テスト結果が Workbench に正常にロードされたら、テスト結果の解析、レポートの生成、およびテスト ケースの変更を行うことができます。詳細については次のセクションを参照してください。

単体テストの詳細については 「テストの作成と実行Test Creation and Execution」を参照してください。

テスト実行モジュールを実行し結果を読み込む

ビルドされたテストモジュールを実行するには、[ビルトイン] > [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 通信用のコンフィギュレーションがあります。

VxWorks DKM プロジェクトのテスト
Anchor
Testing VxWorks DKM Projects
Testing VxWorks DKM Projects

C++test には、VxWorks ダウンロード可能カーネル モジュール (DKM) のテストに特化した 2 つのテスト コンフィギュレーションが用意されています。

...

DKM プロジェクトは、簡単なテストを実行することも、完全な単体テストを実行することもできます。

簡単なテスト

このテストでは、スタブの自動生成および未解決シンボルの詳細レポートはできませんが、外部シンボル リストの生成が必要ありません。そのため、より少ない労力でテストを開始できます。

...

  1. [Parasoft] メニューの [テスト コンフィギュレーション] をクリックします。
  2. [ビルトイン] > [Embedded Systems] > [Wind River] > [Workbench] > [Build VxWorks Test Module - DKM (PassFS または TSFS)] テスト コンフィギュレーションを複製します。
  3. 複製したユーザー定義テスト コンフィギュレーションの [実行] > [シンボル] タブをクリックします。
  4. [ライブラリ シンボル識別モード] を [オフ(すべてのシンボルが利用可能と推測)] に設定します。
  5. [適用] ボタンをクリックしてから [閉じる] ボタンをクリックします。

完全な単体テスト

完全な単体テストを実行できますが、テスト モジュールの作成時に外部シンボル リストが必要です。外部シンボル リストには、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 を使ってテスト オブジェクトが起動されます。

...

Tip
titleヒント

期待されるテスト結果を得るには、テスト実行フローのカスタマイズが必要な場合があります。テスト実行フローの詳細については 「テスト実行フローのカスタマイズCustomizing the Test Execution Flow」を参照してください。

アプリケーションをビルドし、アプリケーション モードで実行するには、ライブラリ シンボルの抽出を除くすべてのステップが含まれている [ビルトイン] > [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 はこの環境での直接的なテスト ケース デバッグをサポートしていません。

...