教程:从 JUnit 测试中访问数据池


目标:

使用 Eclipse 测试和性能工具平台(TPTP)来从示例测试应用程序中创建和访问数据池。

所需时间

一小时

准备工作

在开始本教程之前,需完成下列任务:

  1. 安装 Eclipse 以及 Eclipse 测试和性能工具平台(TPTP)。
  2. 基本了解 JUnit 测试。要了解有关 JUnit 测试的更多信息,请访问 www.junit.org
  3. 配置并运行与 TPTP 版本相对应的代理控制器。有关更多信息,请参阅代理控制器入门


描述

在本教程中,将创建和测试名为 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)
    • 单击“完成”。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 测试和性能工具平台,开发 itemCost 方法的 JUnit 测试。
  1. 打开“测试”透视图。
    • 从“文件”菜单中,选择窗口 > 打开透视图 > 其他
    • 选择测试,然后单击确定。将打开测试导航器。
  2. 创建新的 TPTP JUnit 测试。
    • 在测试导航器中,右键单击 datapoolExample 项目,然后选择新建 > 测试元素...
    • 在“测试元素”对话框中,选择 TPTP JUnit 测试,然后单击下一步。将打开“新建测试用例”对话框,它提示您添加 JUnit 库。单击以添加 JUnit 库。
    • 在“新建 JUnit 测试源代码”页的名称字段中输入 shoppingCartTest_src。在选择如何编辑测试行为部分中,选择在测试编辑器中编辑选项(缺省选项)。
    • 单击完成。将显示 TPTP JUnit 测试编辑器,该编辑器显示了 shoppingCartTest_src 测试套件。“概述”选项卡包含测试描述“源信息”和“测试方法”列表。当前,未定义任何测试方法。对于本教程来说,TPTP JUnit 测试编辑器将生成方法存根,因此应该清除源信息部分中的作为代码来实现测试行为选项。有关更多信息,请参阅 JUnit 测试套件编辑器
  3. 添加 testItemCost 和 testShoppingCartConstructor 方法。
    • 在“测试方法”选项卡中,单击“添加”。将显示缺省的测试名称。
    • 添加 testItemCost 方法。在“名称”字段中,输入 testItemCost 作为新测试名。在“描述”字段中,输入测试 MyShoppingCart.itemCost(String, int) 方法
    • 添加 testShoppingCartConstructor 方法。在“测试方法”选项卡中,单击“添加”。在“名称”字段中,输入 testShoppingCartConstructor 作为新测试名。在“描述”字段中,输入测试 MyShoppingCart 构造函数
  4. 配置测试执行行为。
    • 添加测试执行循环。在“行为”选项卡中,单击添加... > 循环。在“名称”字段中,输入 Loop_MyShoppingCart。在“迭代次数”字段中,输入 1(缺省值)。
    • 添加 testShoppingCartConstructor 调用。选择 Loop_MyShoppingCart,然后单击添加... > 调用。将打开“测试调用”对话框。选择 testShoppingCartConstructor,然后单击“确定”。
    • 添加 testItemCost 调用。选择 Loop_MyShoppingCart,然后单击添加... > 调用。将打开“测试调用”对话框。选择 testItemCost,然后单击“确定”。
    • 保存测试套件。从“文件”菜单中,选择文件 > 保存

      注意:“保存”命令将导致 TPTP JUnit 测试编辑器在 shoppingCartTest_src.java 中创建测试方法存根。
  5. 输入所生成的 JUnit 测试方法 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 启动、测试启动、测试判定、测试停止、第二次测试启动、第二次测试判定、第二次测试停止、循环停止、测试套件判定和测试套件停止。

创建数据池和初始化测试数据


在本过程中,您将创建一个简单的数据池来存储测试数据。通过使用数据池编辑器,您将定义数据池的结构元素,其中包括变量(列)、记录(行)和等价类(相关记录的组)。
  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 变量,然后单击扩展...。将打开“变量扩展”对话框。打开插件 > org.eclipse.tptp.platform.models_Version 文件夹并选择 tptp-models.jar,其中 Version 是 TPTP 版本号。
    • 单击确定以添加该库。
  4. 将 org.eclipse.emf.common_Version.jar 添加到 Java 构建路径中,其中 Version 是 EMF 版本。
    • 在“新建变量类路径条目”对话框中,选择 ECLIPSE_HOME 变量,然后单击扩展...
    • 打开插件文件夹,然后选择 org.eclipse.emf.common_Version.jar,其中 Version 是 EMF 版本。
    • 单击确定以添加该库。
  5. 将 org.eclipse.emf.ecore_Version.jar 添加到 Java 构建路径中,其中 Version 是 EMF 版本。
    • 在“新建变量类路径条目”对话框中,选择 ECLIPSE_HOME 变量,然后单击扩展...
    • 打开插件文件夹,然后选择 org.eclipse.emf.ecore_Version.jar,其中 Version 是 EMF 版本。
    • 单击确定以添加该库。
  6. 将 org.eclipse.core.runtime_Version.jar 添加到 Java 构建路径中,其中 Version 是 Eclipse 平台版本。
    • 在“新建变量类路径条目”对话框中,选择 ECLIPSE_HOME 变量,然后单击扩展...
    • 打开插件文件夹,然后选择 org.eclipse.core.runtime_Version.jar,其中 Version 是 Eclipse 平台版本。
    • 单击确定以添加该库。
  7. 单击确定以关闭“属性”对话框。


使用数据池 API

在本过程中,您将修改 shoppingCartTest_src 类和 testShoppingCartConstructor 方法,以利用 shoppingCartDatapool
  1. 根据需要,打开 Java 透视图。在“文件”菜单中,选择窗口 > 打开透视图 > Java
  2. 打开 shoppingCartTest_src.java。在“导航器”中,打开 datapoolExample 项目文件夹并双击 shoppingCartTest_src.java。shoppingCartTest_src.java 的内容将显示在 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.