チュートリアル: JUnit テストからのデータ・プールへのアクセス


目的:

Eclipse Test and Performance Tools Platform (TPTP) を使用してサンプル・テスト・アプリケーションからデータ・プールを作成し、アクセスします。

所要時間

1 時間

始める前に

このチュートリアルを開始する前に、以下を行う必要があります。

  1. Eclipse および Eclipse Test and Performance Tools Platform (TPTP) をインストールします。
  2. JUnit テストの基本を理解します。 JUnit テストについて詳しくは、www.junit.org を参照してください。
  3. 使用している TPTP バージョンに合った Agent Controller を構成し、実行します。詳細は、『 Getting started with the Agent Controller』を参照してください。


説明

このチュートリアルでは、MyShoppingCart というアプリケーションを作成、テストします。 Eclipse Test and Performance Tools Platform (TPTP) を使用して、JUnit テストを開発し、テスト環境にデータを提供するデータ・プールを作成します。

このチュートリアルでは、以下の手順に沿って説明していきます。

  1. サンプル・ユーザー・アプリケーションの作成
  2. TPTP テスト・スイートのセットアップ
  3. データ・プールの作成とテスト・データの初期化
  4. データ・プールを参照するようにテスト・ケースを変更

サンプル・ユーザー・アプリケーションの作成


このステップでは MyShoppingCart クラスを開発します。以降のステップでは、Eclipse Test and Performance Tools Platform を使用してテスト環境を開発します。
  1. 新規の Eclipse Java プロジェクトを作成します。
    • 「ファイル」メニューから、「ファイル」>「新規」>「プロジェクト...」と選択します。「新規プロジェクト」ダイアログが表示されます。
    • 「ウィザード」リストで、「Java プロジェクト」を選択し、「次へ」をクリックします。「Java プロジェクトの作成」ページが表示されます。
    • プロジェクト名に datapoolExample を入力し、「終了」をクリックします。 datapoolExample プロジェクトが「ナビゲーター」ビューに表示されます。
  2. MyShoppingCart クラスを作成します。
    • 「ナビゲーター」ビューで、datapoolExample プロジェクトを右クリックし、「新規」>「クラス」と選択します。「新規 Java クラス」ダイアログが開きます。
    • 名前」フィールドに MyShoppingCart を入力します。
    • メイン・メソッドの public static void main(String[] args) を作成するオプションをクリアします。
    • 「終了」をクリックします。MyShoppingCart.java ファイルが Java エディターに表示されます。
    • 次のように MyShoppingCart ソースを入力します。
      import java.util.*;
      
      public class MyShoppingCart {
      
      	public Hashtable myFlowers;
      	
      	public MyShoppingCart() {
      	    
      		myFlowers = new Hashtable();
      		myFlowers.put("Orchid", new Double(5.99));
      		myFlowers.put("Tulip", new Double(1.99));
      		myFlowers.put("White Poinsee", new Double(6.99));
      		myFlowers.put("White Rose", new Double(9.99));
      		myFlowers.put("Geraniums", new Double(4.99));		
      	}
      	
      	public double itemCost(String itemName, int itemQuantity)
      	{
      	     Double price = (Double)myFlowers.get(itemName);
      		
      	     if (price != null) {
      	    	 return price.doubleValue()*itemQuantity;
      	     }
      	     
      	     return -1;	    	 	    	 	     		
      	}
      }
    • MyShoppingCart.java を保管します。「ファイル」メニューから、「ファイル」>「保管」と選択します。

TPTP テスト・スイートのセットアップ


このステップでは MyShoppingCart クラスのテスト・スイートを開発します。 Eclipse Test and Performance Tools Platform を使用して、itemCost メソッドの JUnit テストを開発します。
  1. テスト・パースペクティブを開きます。
    • 「ファイル」メニューから、「ウィンドウ」>「パースペクティブを開く」>「その他」を選択 します。
    • テスト」を選択し、「OK」をクリックします。テスト・ナビゲーターが表示されます。
  2. 新規の TPTP JUnit テストを作成します。
    • テスト・ナビゲーターで、datapoolExample プロジェクトを右クリックし、「新規」>「テスト要素...」と選択します。
    • 「テスト要素」ダイアログで、「TPTP JUnit テスト」を選択し、「次へ」をクリックします。「新規テスト・ケース」ダイアログが開き、JUnit ライブラリーの追加を求められます。「はい」をクリックして、JUnit ライブラリーを追加します。
    • 「新規 JUnit テスト・ソース・コード」ページで、「名前」フィールドに shoppingCartTest_src を入力します。「テストの振る舞いを編集する方法を選択」セクションで、「テスト・エディター」オプション (デフォルト) を選択します。
    • 終了」をクリックします。 TPTP JUnit テスト・エディターが表示され、shoppingCartTest_src テスト・スイートが示されます。「概要」タブではテストの説明、ソース情報、テスト・メソッド・リストが表示されます。現在、テスト・メソッドは定義されていません。 このチュートリアルでは、TPTP JUnit テスト・エディターはメソッド・スタブを生成するので、「ソース情報」セクションの 「テストの振る舞いをコードとして実装」オプションをクリアする必要があります。詳しくは、『JUnit テスト・スイート・エディター』を参照してください
  3. testItemCost および testShoppingCartConstructor メソッドを追加します。
    • 「テスト・メソッド」タブで「追加」をクリックします。テストのデフォルト名が表示されます。
    • testItemCost メソッドを追加します。「名前」フィールドに、新しいテスト名として testItemCost と入力します。「説明」フィールドで、Test for the MyShoppingCart.itemCost(String, int) method と入力します。
    • testShoppingCartConstructor メソッドを追加します。「テスト・メソッド」タブで「追加」をクリックします。「名前」フィールドに、新しいテスト名として testShoppingCartConstructor と入力します。「説明」フィールドで、Test for the MyShoppingCart constructor と入力します。
  4. テスト実行の振る舞いを構成します。
    • テスト実行ループを追加します。「振る舞い」タブで「追加...」>「ループ」とクリックします。「名前」フィールドに Loop_MyShoppingCart と入力します。「反復回数」フィールドで 1 (デフォルト値) を入力します。
    • testShoppingCartConstructor 呼び出しを追加します。 Loop_MyShoppingCart を選択し、「追加...」>「呼び出し」とクリックします。「テストの呼び出し」ダイアログが表示されます。 testShoppingCartConstructor を選択し、「OK」をクリックします。
    • testItemCost 呼び出しを追加します。 Loop_MyShoppingCart を選択し、「追加...」>「呼び出し」とクリックします。「テストの呼び出し」ダイアログが表示されます。 testItemCost を選択し、「OK」をクリックします。
    • テスト・スイートを保管します。「ファイル」メニューから、「ファイル」>「保管」を選択 します。

      注: 「保管」コマンドを使うと、TPTP JUnit テスト・エディターが shoppingCartTest_src.java にテスト・メソッド・スタブを作成するので注意してください。
  5. 生成されたテスト・メソッドの testShoppingCartConstructor および testItemCost にコードを入力します。
    • Java パースペクティブを開きます。「ファイル」メニューから、「ウィンドウ」>「パースペクティブを開く」>「その他...」>「Java」と選択します。
    • shoppingCartTest_src.java を開きます。 ナビゲーターで、datapoolExample プロジェクト・フォルダーを開き、 shoppingCartTest_src.java をダブルクリックします。 shoppingCartTest_src.java の内容が Java エディターに表示され、この中にはテスト・スイートをセットアップ、実行するコードと、testShoppingCartConstructor および testItemCost のスタブ・メソッドが含まれています。
    • testShoppingCartConstructor メソッドのコードとして以下を入力します。
      public void testShoppingCartConstructor()
      throws Exception
      {
      	MyShoppingCart cart = new MyShoppingCart();
      	Double priceOrchid = (Double)cart.myFlowers.get("Orchid");
      	Double priceTulip = (Double)cart.myFlowers.get("Tulip");
      	
      	assertTrue(priceOrchid.doubleValue() == 5.99);
      	assertTrue(priceTulip.doubleValue() == 1.99);
      }
    • testItemCost メソッドのコードとして以下を入力します。
      public void testItemCost()
      throws Exception
      {
      	MyShoppingCart cart = new MyShoppingCart();
      	double priceForTwo = cart.itemCost("Orchid", 2);
      	
      	assertTrue(priceForTwo == 11.98);
      }
    • shoppingCartTest_src.java を保管します。「ファイル」メニューから、「ファイル」>「保管」を選択します。
  6. テスト・パースペクティブを開き、テスト用デプロイメントを作成します。サンプルについては、『テスト用デプロイメントの作成』を参照してください。
  7. カスタム・デプロイメントを使用してテストを実行します。
    • テスト・ナビゲーターで、shoppingCartTest_src テスト・スイートを右クリックし、「実行」>「構成および実行...」と選択します。「構成および実行」ダイアログが表示されます。
    • 「構成」ペインで、「テスト」を選択し、「新規」をクリックします。
    • 「構成および実行」ダイアログの左ペイン (「実行するテストの選択」) で、datapoolExample を展開し、shoppingCartTest_src テスト・スイートを選択します。
    • 「構成および実行」ダイアログの右ペインで、作成したデプロイメントを選択します。
    • 「テスト・ログ」タブで、「デフォルトを使用」オプションをクリアし、ロケーションの datapoolExample プロジェクト・フォルダーを選択します。
    • 実行」をクリックしてテストを起動します。
  8. shoppingCartTest_src テスト・ログをダブルクリックすると、これがテスト・ナビゲーターに表示されます。 shoppingCartTest_src テスト・ログが表示されます。「イベント」タブを選択してテスト詳細を表示します。表示されるイベントは、テスト・スイートの開始、Loop_MyShoppingCart の開始、テストの開始、テストの判断、テストの停止、第 2 テストの開始、第 2 テストの判断、第 2 テストの停止、ループの停止、テスト・スイートの判断、テスト・スイートの停止です。

データ・プールの作成とテスト・データの初期化


このステップでは、テスト・データを保管するための単純なデータ・プールを作成します。データ・プール・エディターを使用して、データ・プールの構造要素を定義します。構造要素は変数 (列)、レコード (行)、等価クラス (関連レコードの集団) です。
  1. テスト・データを含む CSV (コンマで区切られている) ファイルを作成します。通常、スプレッドシート・アプリケーションのデータやデータベースを CSV 形式でエクスポートできます。しかしこのチュートリアルでは、テキスト・エディターでデータを入力します。
    • テキスト・エディターで次の内容を入力します。
      ,ModelNumber::String,Description::String,Price::Double
      flowers,F0001,Orchid,5.99
      flowers,F0002,Tulip,1.99
      flowers,F0003,White Poinsee,6.99
      flowers,F0004,White Rose,9.99
      flowers,F0005,Geraniums,4.99
    • これを、一時的な外部の場所に flowerData.csv というファイルで保管します。
  2. Eclipse でテスト・パースペクティブを開きます。
    • 「ファイル」メニューから、「ウィンドウ」>「パースペクティブを開く」>「その他」を選択 します。
    • テスト」を選択し、「OK」をクリックします。テスト・ナビゲーターが表示されます。
  3. テスト・ナビゲーターで、プロジェクトを右クリックし、 「新規」>「テスト要素...」と選択します。 「新規テスト要素」ダイアログが開きます。
  4. 「ウィザード」リスト・ボックスで、「テスト資産」フォルダーを展開し、 「データ・プール」を選択します。
  5. 次へ」をクリックします。 「新規データ・プール」ダイアログが表示されます。
  6. データ・プール・プロジェクト・フォルダーとデータ・プール名を選択します。既存プロジェクトのリスト内で、datapoolExample プロジェクトを選択します。 「名前」フィールドに shoppingCartDatapool と入力します。次へ」をクリックして先へ進め、さらに「次へ」をクリックすると、CSV (コンマで区切られている) ファイルのインポート・ページが開きます。
  7. CSV ファイルの flowerData.csv をインポートします。
    • 「CSV ファイル」フィールドで、「参照」をクリックし、 flowerData.csv にナビゲートします。
    • 「変数名と推薦される型を含む最初の行」オプションにチェック・マークを付けます。flowerData.csv の第 1 行に列見出しとタイプが含まれます。
    • 「等価クラス名を含む最初の列」オプションにチェック・マークを付けます。等価クラスは、関係するデータをグループ化します。flowerData.csv の第 1 列は flowers という単一の等価クラスを指定します。
  8. 終了」をクリックします。 初期データ・プールの大きさを指定した場合、CSV ファイル・サイズと競合することがあり、ダイアログが表示されます。「はい」をクリックすると、CSV ファイルのサイズを使います。「いいえ」をクリックすると、指定された初期のサイズを使います (CSV ファイルのデータを切り捨てる可能性があります)。 データ・プール・エディターが現れ、flowers 等価クラスに含まれるデータが表示されます。

    データ・プール作成の詳細は、『データ・プールの作成』を参照してください。


データ・プールを参照するようにテスト・ケースを変更


このステップでは、データ・プール API を使用して、ハードコーディングされたテスト値をデータ・プール列への参照に置き換えます。

データ・プール API が必要とするライブラリーの追加

データ・プール API はさまざまな TPTP ライブラリーと Eclipse Modeling Framework (EMF) ライブラリーを必要とします。ここでは、これらのライブラリーを Java ビルド・パスに追加します。
  1. Java パースペクティブを開きます。「ファイル」メニューから、「ウィンドウ」>「パースペクティブを開く」>「Java」と選択します。
  2. datapoolExample プロジェクトのプロパティーを開きます。「ナビゲーター」ウィンドウまたは「パッケージ・エクスプローラー」ウィンドウで、「datapoolExample」プロジェクト・フォルダーを右クリックし、プロパティーを選択します。「datapoolExample のプロパティー」ダイアログが表示されます。
  3. tptp-models.jar を Java ビルド・パスに追加します。
    • 左ペインで「Java ビルド・パス」を選択します。
    • 右ペインで、「ライブラリー」タブを選択し、「変数の追加...」をクリックします。「新規変数クラスパス・エントリー」ダイアログが表示されます。
    • ECLIPSE_HOME 変数を選択し、「拡張...」をクリックします。「変数拡張」ダイアログが表示されます。「plugins」> org.eclipse.tptp.platform.models_Version フォルダーを開き、tptp-models.jar を選択します。ここで、Version は使用している TPTP バージョン番号です。
    • OK」をクリックしてライブラリーを追加します。
  4. org.eclipse.emf.common_Version.jar を Java ビルド・パスに追加します。ここで、Version は EMF バージョンです。
    • 「新規変数クラスパス・エントリー」ダイアログで、ECLIPSE_HOME 変数を選択し、「拡張...」をクリックします。
    • plugins フォルダーを開き、org.eclipse.emf.common_Version.jar を選択します。ここで、Version は EMF バージョンです。
    • OK」をクリックしてライブラリーを追加します。
  5. org.eclipse.emf.ecore_Version.jar を Java ビルド・パスに追加します。ここで、Version は EMF バージョンです。
    • 「新規変数クラスパス・エントリー」ダイアログで、ECLIPSE_HOME 変数を選択し、「拡張...」をクリックします。
    • プラグイン・フォルダーを開き、org.eclipse.emf.ecore_Version.jar を選択します。ここで、Version は EMF バージョンです。
    • OK」をクリックしてライブラリーを追加します。
  6. org.eclipse.core.runtime_Version.jar を Java ビルド・パスに追加します。ここで、Version は Eclipse プラットフォームのバージョンです。
    • 「新規変数クラスパス・エントリー」ダイアログで、ECLIPSE_HOME 変数を選択し、「拡張...」をクリックします。
    • プラグイン・フォルダーを開き、org.eclipse.core.runtime_Version.jar を選択します。ここで、Version は Eclipse プラットフォームのバージョンです。
    • OK」をクリックしてライブラリーを追加します。
  7. OK」をクリックして「プロパティー」ダイアログを閉じます。


データ・プール API の使用

このステップでは、shoppingCartTest_src クラスと testShoppingCartConstructor メソッドを変更して shoppingCartDatapool を使用します。
  1. 必要に応じて、Java パースペクティブを開きます。「ファイル」メニューから、「ウィンドウ」>「パースペクティブを開く」>「Java」と選択します。
  2. shoppingCartTest_src.java を開きます。 ナビゲーターで、datapoolExample プロジェクト・フォルダーを開き、 shoppingCartTest_src.java をダブルクリックします。 shoppingCartTest_src.java の内容が Java エディターに表示されます。
  3. 次のインポート・ステートメントを shoppingCartTest_src クラスに追加します。
    import org.eclipse.hyades.models.common.datapool.impl.*;
    import org.eclipse.hyades.execution.runtime.datapool.*;
  4. IDatapoolIterator クラス・インスタンスを宣言します。このクラス・インスタンスはセットアップ・コードで初期化され、テスト・メソッドで使用されます。
    public class shoppingCartTest_src extends HyadesTestCase {
    	
    	IDatapoolIterator dpIterator;
    	
    	//...
  5. setUp メソッドを変更してデータ・プールを初期化します。 TPTP JUnit テスト環境で、setUp メソッドは共通の機能を提供します。 setUp を使用して共通のテスト変数を初期化します。 注: java.io.File コンストラクターの <workspace> の場所に完全修飾パスのワークスペースを指定してください。
    protected void setUp() throws Exception {
    	// Initialize the datapool factory
    	IDatapoolFactory dpFactory = new Common_DatapoolFactoryImpl();
    		
    	// Load the shoppingCartDatapool datapool 
    	IDatapool datapool = dpFactory.load(
    			new java.io.File("<workspace>\\datapoolExample\\shoppingCartDatapool.datapool"),
    			false);
    		   
    	// Create an iterator to traverse the datapool
    	dpIterator = dpFactory.open(datapool,"org.eclipse.hyades.datapool.iterator.DatapoolIteratorSequentialPrivate");
    	
    	// Initialize the datapool to traverse the first equivalence class.
    	dpIterator.dpInitialize(datapool,0);
    }
    注:
    • IDatapoolFactory ロード・メソッドの第 2 パラメーターは、データ・プール・インスタンスが共用されているかどうかを示します。 true の場合、データ・プールの既存コピーについてデータ・プール・キャッシュがチェックされます。 false の場合、データ・プールはプライベート・インスタンスです。共用データ・プール・インスタンスを変更すると、他のユーザーに影響を与えることがあるため、制限された環境でのみ使用することをお勧めします。
    • プログラマチックにデータ・プールを編集したい場合は、org.eclipse.hyades.edit.datapool をインポートします。
    • IDatapoolFactory オープン・メソッドの第 2 パラメーターは、イテレーターの型を示します。共用データ・プールの場合、DatapoolIteratorSequentialPrivate を使用します。
  6. testShoppingCartConstructor メソッドを変更して、shoppingCartDatapool を使用します。
    public void testShoppingCartConstructor()
    throws Exception
    {
    	MyShoppingCart cart = new MyShoppingCart();
    		
    	// Traverse through datapool...
    	// Test if constructor initializes each flower record appropriately
    	while(!dpIterator.dpDone())
    	{
    		String Description = dpIterator.dpCurrent().getCell("Description").getStringValue();
    		double datapoolPrice = dpIterator.dpCurrent().getCell("Price").getDoubleValue();
    		
    		// Test if the flower is accounted for in the application
    		Double applicationPrice;
    		assertNotNull(applicationPrice = (Double)cart.myFlowers.get(Description));
    		
    		// Test that the application price equals the price in the datapool 
    		assertTrue(applicationPrice.doubleValue() == datapoolPrice);
    		
    		dpIterator.dpNext();
    	}
    }
  7. shoppingCartTest_src.java を保管します。「ファイル」メニューから、「ファイル」>「保管」を選択します。
  8. データ・プールを testArtifact に追加します。
    • テスト・パースペクティブを開きます。テスト・ナビゲーターで、testDeployment をダブルクリックしてそれをエディターで開きます。
    • ペア」タブで、testAsset を選択して「開く...」をクリックします
    • テスト資産」タブで「追加...」をクリックします。データ・プールを選択し、「OK」をクリックします。テスト資産を保管します。
  9. カスタム・デプロイメントを使用してテストを実行します。
    • テスト・パースペクティブを開きます。テスト・ナビゲーターで、shoppingCartTest_src テスト・スイートを右クリックし、「実行」>「構成および実行...」と選択します。「構成および実行」ダイアログが表示されます。
    • 「構成および実行」ダイアログの左ペインで、shoppingCartTest_src テスト・スイートを選択します。
    • 「構成および実行」ダイアログの右ペインで、『始める前に』セクションで作成したデプロイメントを選択します。
    • 「テスト・ログ」タブで、「デフォルトを使用」オプションをクリアし、ロケーションの datapoolExample プロジェクト・フォルダーを選択します。
    • 実行」をクリックしてテストを起動します。
  10. 新規の shoppingCartTest_src テスト・ログをダブルクリックすると、これがテスト・ナビゲーターに表示されます。 shoppingCartTest_src テスト・ログが表示されます。「イベント」タブを選択してテスト結果詳細を表示します。


関連概念
共通のテスト・タスクと概念

関連タスク
テスト用デプロイメントの作成
テストに変数データを提供
JUnit テストの手動作成

(C) Copyright IBM Corporation 2000, 2006. All Rights Reserved.