教學指導:從 JUnit 測試存取資料儲存區


目標:

使用 Eclipse 測試和效能工具平台 (TPTP),從範例測試應用程式建立和存取資料儲存區。

所需時間

1 小時

開始之前

開始本教學指導之前,您必須

  1. 安裝 Eclipse 及 Eclipse 測試和效能工具平台 (TPTP)。
  2. 對 JUnit 測試有基本的了解。如需 JUnit 測試的相關資訊,請造訪 www.junit.org
  3. 配置和執行符合 TPTP 版本的 Agent Controller。如果需要詳細資訊,請參閱 Agent Controller 入門


說明

在本教學指導中,您將建立和測試 MyShoppingCart 這個應用程式。 您將利用 Eclipse 測試和效能工具平台 (TPTP) 來開發 JUnit 測試,並建立資料儲存區來提供資料給測試環境。

本教學指導會引導您完成下列程序:

  1. 建立使用者應用程式範例
  2. 設定 TPTP 測試套組
  3. 建立資料儲存區和起始設定測試資料
  4. 修改測試案例來參照資料儲存區

建立使用者應用程式範例


在此程序中,您將開發 MyShoppingCart 類別。在後續的程序中,您將利用「Eclipse 測試和效能工具平台」來開發相對應的測試環境。
  1. 建立新的 Eclipse Java 專案。
    • 從「檔案」功能表,選擇檔案 > 新建 > 專案...。這時會出現「新建專案」對話框。
    • 在「精靈」清單中,選取 Java 專案,按下一步。 這時會出現「建立 Java 專案」頁面。
    • 在「專案名稱」中輸入 datapoolExample,再按一下完成。 「導覽器」視圖中會顯示 datapoolExample 專案。
  2. 建立 MyShoppingCart 類別。
    • 在「導覽器」視圖中,用滑鼠右鍵按一下 datapoolExample 專案,選擇新建 > 類別。這時會出現「新建 Java 類別」對話框。
    • 名稱欄位中,輸入 MyShoppingCart
    • 清除建立 main 方法 public static void main(String[] args) 的選項。
    • 按一下「完成」。Java 編輯器中會顯示 MyShoppingCart.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 測試和效能工具平台來開發 itemCost 方法的 JUnit 測試。
  1. 開啟「測試視景」。
    • 從「檔案」功能表,選擇視窗 > 開啟視景 > 其他
    • 選取測試,再按一下確定。這時會出現「測試導覽器」。
  2. 建立新的 TPTP JUnit 測試。
    • 在「測試導覽器」,用滑鼠右鍵按一下 datapoolExample 專案,選擇新建 > 測試元素...
    • 在「測試元素」對話框,選取 TPTP JUnit 測試,按下一步。這時會出現「新建測試案例」對話框,提示您新增 JUnit 程式庫。按一下,新增 JUnit 程式庫。
    • 在「新建 JUnit 測試程式碼」頁面中,在名稱欄位中輸入 shoppingCartTest_src。在選取如何編輯測試行為區段,選擇在測試編輯器中編輯選項(預設值)。
    • 按一下完成。 這時會出現「TPTP JUnit 測試」編輯器,顯示 shoppingCartTest_src 測試套組。 「概觀」標籤包含測試說明、「程式碼資訊」及「測試方法」清單。目前尚未定義任何測試方法。在本教學指導中,「TPTP JUnit 測試」編輯器會產生方法 Stub, 應該清除程式碼資訊區段中的將測試行為實作為程式碼選項。如果需要詳細資訊,請參閱 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,按一下「確定」。
    • 新增 testItemCost 呼叫。選取 Loop_MyShoppingCart,再按一下新增... > 呼叫。這時會出現「測試呼叫」對話框。 選取 testItemCost,再按一下「確定」。
    • 儲存測試套組。從「檔案」功能表中,選擇檔案 > 儲存

      附註:「儲存」指令會使「TPTP JUnit 測試」編輯器在 shoppingCartTest_src.java 中建立測試方法 Stub
  5. 為產生的 JUnit 測試方法 testShoppingCartConstructor 和 testItemCost 輸入程式碼。
    • 開啟「Java 視景」。從檔案功能表中,選擇視窗 > 開啟視景 > 其他... > Java
    • 開啟 shoppingCartTest_src.java。在「導覽器」開啟 datapoolExample 專案資料夾,再按兩下 shoppingCartTest_src.java。 Java 編輯器中會顯示 shoppingCartTest_src.java 內容,包含設定和執行測試套組所需的程式碼,以及 testShoppingCartConstructor 和 testItemCost 的 Stub 方法。
    • 輸入下列 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 開始、測試開始、測試判定、測試停止、第二個測試開始、第二個測試判定、第二個測試停止、迴圈停止、測試套組判定及測試套組停止。

建立資料儲存區和起始設定測試資料


在此程序中,您將建立簡單的資料儲存區來儲存測試資料。您將利用資料儲存區編輯器來定義資料儲存區的結構元素, 包括變數(直欄)、記錄(列)及等值類別(相關的記錄群組)。
  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 中,開啟「測試視景」。
    • 從「檔案」功能表,選擇視窗 > 開啟視景 > 其他
    • 選取測試,再按一下確定。這時會出現「測試導覽器」。
  3. 在「測試導覽器」,用滑鼠右鍵按一下專案, 選取新建 > 測試元素...。 這時會出現新建測試元素對話框。
  4. 在「精靈」清單框,展開測試資產資料夾,選取資料儲存區
  5. 下一步。 這時會出現新建資料儲存區對話框。
  6. 選擇資料儲存區專案資料夾和資料儲存區名稱。 在現有專案的清單中,選取 datapoolExample 專案。在名稱欄位中, 輸入 shoppingCartDatapool。下一步繼續, 再按下一步,開啟匯入 CSV(逗點分隔)檔案頁面。
  7. 匯入 CSV 檔案 flowerData.csv。
    • CSV 檔案欄位中,按一下瀏覽,瀏覽至 flowerData.csv。
    • 勾選第一列包含變數名稱和建議類型選項。flowerData.csv 的第一列包含直欄標題和類型。
    • 勾選第一欄包含等值類別名稱選項。等值類別會將相關資料分組。flowerData.csv 的第一欄指定一個名稱為 flowers 的等值類別。
  8. 按一下完成如果已指定起始資料儲存區大小,且和 CSV 檔案大小發生衝突,將出現對話框。請按一下,使用 CSV 檔案的大小。按一下,使用指定的起始大小(可能截斷 CSV 檔案資料)。 這時會出現「資料儲存區」編輯器,顯示 flowers 等值類別包含的資料。

    如需建立資料儲存區的詳細資訊,請參閱建立資料儲存區


修改測試案例來參照資料儲存區


在此程序中,您將使用資料儲存區 API,以資料儲存區直欄的參照來取代寫在程式中的測試值。

新增資料儲存區 API 所需的程式庫。

資料儲存區 API 需要各種 TPTP 和 Eclipse 建模架構 (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.jarVersion 代表您的 TPTP 版本號碼。
    • 按一下確定來新增程式庫。
  4. 將 org.eclipse.emf.common_Version.jar 新增至 Java 建置路徑,Version 代表您的 EMF 版本。
    • 在「新建變數類別路徑項目」對話框,選取 ECLIPSE_HOME 變數,再按一下延伸...
    • 開啟 plugins 資料夾,選取 org.eclipse.emf.common_Version.jarVersion 代表您的 EMF 版本。
    • 按一下確定來新增程式庫。
  5. 將 org.eclipse.emf.ecore_Version.jar 新增至 Java 建置路徑,Version 代表您的 EMF 版本。
    • 在「新建變數類別路徑項目」對話框,選取 ECLIPSE_HOME 變數,再按一下延伸...
    • 開啟 plugins 資料夾,選取 org.eclipse.emf.ecore_Version.jarVersion 代表您的 EMF 版本。
    • 按一下確定來新增程式庫。
  6. 將 org.eclipse.core.runtime_Version.jar 新增至 Java 建置路徑,Version 代表您的 Eclipse 平台版本。
    • 在「新建變數類別路徑項目」對話框,選取 ECLIPSE_HOME 變數,再按一下延伸...
    • 開啟 plugins 資料夾,選取 org.eclipse.core.runtime_Version.jarVersion 代表您的 Eclipse 平台版本。
    • 按一下確定來新增程式庫。
  7. 按一下確定來關閉「內容」對話框。


使用資料儲存區 API。

在此程序中,您將修改 shoppingCartTest_src 類別和 testShoppingCartConstructor 方法來利用 shoppingCartDatapool
  1. 必要的話,請開啟「Java 視景」。從檔案功能表中,選擇視窗 > 開啟視景 > Java
  2. 開啟 shoppingCartTest_src.java。在「導覽器」開啟 datapoolExample 專案資料夾,再按兩下 shoppingCartTest_src.java。 Java 編輯器中會顯示 shoppingCartTest_src.java 內容。
  3. 將下列 import 陳述式新增至 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 load 方法指出是否共用資料儲存區實例。若為 true,則會在資料儲存區快取中檢查現有的資料儲存區副本。若為 false,則資料儲存區為專用實例。修改共用的資料儲存區實例可能影響其他使用者,僅適用於封閉環境。
    • 如果要在程式中編輯資料儲存區,請匯入 org.eclipse.hyades.edit.datapool。
    • IDatapoolFactory open 方法的第二個參數代表疊代子的類型。若為的共用資料儲存區,請使用 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,再按一下開啟...
    • 測試資產標籤中,按一下新增...。選取資料儲存區,再按一下確定。儲存資產。
  9. 使用自訂部署來執行測試。
    • 開啟「測試視景」。在「測試導覽器」,用滑鼠右鍵按一下 shoppingCartTest_src 測試套組,選擇執行方式 > 執行...。這時會出現「執行配置」對話框。
    • 在「執行」配置的左窗格,選擇 shoppingCartTest_src 測試套組。
    • 在「執行」配置的右窗格,選取您在開始之前區段中建立的部署。
    • 在「測試日誌」標籤中,清除使用預設值選項,並於位置中選取 datapoolExample 專案資料夾。
    • 按一下執行,開始測試。
  10. 按兩下「測試導覽器」中顯示的新的 shoppingCartTest_src 測試日誌。這時會出現 shoppingCartTest_src 測試日誌。選取「事件」標籤來檢視測試結果詳細資料。


相關概念
通用測試作業和概念

相關作業
建立測試部署
提供測試的變數資料
手動建立 JUnit 測試

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