目标:
使用 Eclipse 测试和性能工具平台(TPTP)来从示例测试应用程序中创建和访问数据池。
所需时间
一小时
在开始本教程之前,需完成下列任务:
-
安装 Eclipse 以及 Eclipse 测试和性能工具平台(TPTP)。
- 基本了解 JUnit 测试。要了解有关 JUnit 测试的更多信息,请访问 www.junit.org。
- 配置并运行与 TPTP 版本相对应的代理控制器。有关更多信息,请参阅代理控制器入门。
描述
在本教程中,将创建和测试名为 MyShoppingCart 的应用程序。通过使用 Eclipse 测试和性能工具平台(TPTP),开发 JUnit 测试并创建数据池以便向测试环境提供数据。
本教程将指导您完成下列过程:
- 创建样本用户应用程序
- 设置 TPTP 测试套件
- 创建数据池并初始化测试数据
- 修改测试用例以引用数据池
在本过程中,您将开发 MyShoppingCart 类。在随后的过程中,您将使用 Eclipse 测试和性能工具平台来开发相应的测试环境。
- 创建新的 Eclipse Java 项目。
- 从“文件”菜单中,选择文件 > 新建 > 项目...。将显示“新建项目”对话框。
- 在“向导”列表中,选择 Java 项目,然后单击下一步。将显示“创建 Java 项目”页。
- 输入 datapoolExample 作为项目名,然后单击完成。datapoolExample 项目将显示在“导航器”视图中。
- 创建 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。从“文件”菜单中,选择文件 > 保存。
在本过程中,将开发 MyShoppingCart 类的测试套件。通过使用 Eclipse 测试和性能工具平台,开发 itemCost 方法的 JUnit 测试。
- 打开“测试”透视图。
- 从“文件”菜单中,选择窗口 > 打开透视图 > 其他。
- 选择测试,然后单击确定。将打开测试导航器。
- 创建新的 TPTP JUnit 测试。
- 在测试导航器中,右键单击 datapoolExample 项目,然后选择新建 > 测试元素...。
- 在“测试元素”对话框中,选择 TPTP JUnit 测试,然后单击下一步。将打开“新建测试用例”对话框,它提示您添加 JUnit 库。单击是以添加 JUnit 库。
- 在“新建 JUnit 测试源代码”页的名称字段中输入
shoppingCartTest_src。在选择如何编辑测试行为部分中,选择在测试编辑器中编辑选项(缺省选项)。
- 单击完成。将显示 TPTP JUnit 测试编辑器,该编辑器显示了 shoppingCartTest_src 测试套件。“概述”选项卡包含测试描述“源信息”和“测试方法”列表。当前,未定义任何测试方法。对于本教程来说,TPTP JUnit 测试编辑器将生成方法存根,因此应该清除源信息部分中的作为代码来实现测试行为选项。有关更多信息,请参阅 JUnit 测试套件编辑器。
- 添加 testItemCost 和 testShoppingCartConstructor 方法。
- 在“测试方法”选项卡中,单击“添加”。将显示缺省的测试名称。
- 添加 testItemCost 方法。在“名称”字段中,输入 testItemCost 作为新测试名。在“描述”字段中,输入测试 MyShoppingCart.itemCost(String, int) 方法。
- 添加 testShoppingCartConstructor 方法。在“测试方法”选项卡中,单击“添加”。在“名称”字段中,输入
testShoppingCartConstructor 作为新测试名。在“描述”字段中,输入测试 MyShoppingCart 构造函数。
- 配置测试执行行为。
- 添加测试执行循环。在“行为”选项卡中,单击添加... > 循环。在“名称”字段中,输入
Loop_MyShoppingCart。在“迭代次数”字段中,输入 1(缺省值)。
- 添加 testShoppingCartConstructor 调用。选择 Loop_MyShoppingCart,然后单击添加... > 调用。将打开“测试调用”对话框。选择 testShoppingCartConstructor,然后单击“确定”。
- 添加 testItemCost 调用。选择 Loop_MyShoppingCart,然后单击添加... > 调用。将打开“测试调用”对话框。选择
testItemCost,然后单击“确定”。
- 保存测试套件。从“文件”菜单中,选择文件 > 保存。
注意:“保存”命令将导致 TPTP JUnit 测试编辑器在 shoppingCartTest_src.java 中创建测试方法存根。
-
输入所生成的 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。从“文件”菜单中,选择文件 > 保存。
- 打开“测试”透视图并创建测试部署。要获取示例,请参阅创建测试部署。
-
使用定制部署来运行测试。
- 在测试导航器中,右键单击 shoppingCartTest_src 测试套件,然后选择运行方式 > 运行...。将打开“运行配置”对话框。
- 在“配置”窗格中,选择测试,然后单击新建。
- 在“运行配置”的左窗格中(选择要运行的测试),展开 datapoolExample,然后选择 shoppingCartTest_src 测试套件。
- 在“运行配置”的右窗格中,选择已创建的部署部分。
- 在“测试日志”选项卡中,清除使用缺省值选项,然后选择 datapoolExample 项目文件夹作为位置。
- 单击运行以启动该测试。
- 双击测试导航器中的 shoppingCartTest_src 测试日志。将显示 shoppingCartTest_src 测试日志。选择“事件”选项卡以查看测试详细信息。您应该会看到下列事件:测试套件启动、Loop_MyShoppingCart 启动、测试启动、测试判定、测试停止、第二次测试启动、第二次测试判定、第二次测试停止、循环停止、测试套件判定和测试套件停止。

在本过程中,您将创建一个简单的数据池来存储测试数据。通过使用数据池编辑器,您将定义数据池的结构元素,其中包括变量(列)、记录(行)和等价类(相关记录的组)。
- 创建包含测试数据的 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。
- 在 Eclipse 中,打开“测试”透视图。
- 从“文件”菜单中,选择窗口 > 打开透视图 > 其他。
- 选择测试,然后单击确定。将打开测试导航器。
- 在测试导航器中,右键单击一个项目,然后选择新建 > 测试元素...。将打开新建测试元素对话框。
- 在“向导”列表框中,展开测试资产文件夹,然后选择数据池。
- 单击下一步。将打开新建数据池对话框。
- 选择数据池项目文件夹和数据池名称。在现有项目的列表中,选择 datapoolExample
项目。在名称字段中,输入 shoppingCartDatapool。单击下一步以继续,然后再次单击下一步以
打开 CSV 文件(逗号分隔的文件)导入页面。
- 导入 CSV 文件 flowerData.csv。
- 在 CSV 文件字段中,单击浏览并浏览至
flowerData.csv。
- 选中第一行包含变量名和建议的类型选项。flowerData.csv 的第一行包含列标题和类型。
- 选中第一列包含等价类名选项。等价类对相关的数据进行分组。flowerData.csv 的第一列指定了名为 flowers 的单一等价类。
- 单击完成。如果指定了初始数据池维(此维可能会与 CSV 文件维发生冲突),就会显示一个对话框。单击是以使用 CSV 文件的维。单击否以使用指定的初始维(这可能会导致截断 CSV 文件数据)。将打开数据池编辑器,它显示了 flowers 等价类中包含的数据。
要了解有关创建数据池的详细信息,请参阅创建数据池。
在本过程中,您将使用数据池 API 来将硬编码的测试值替换为数据池列引用。
添加数据池 API 所需的库
数据池 API 需要各种 TPTP 和 Eclipse 建模框架(EMF)库。在本过程中,将这些库添加到 Java 构建路径中。
- 打开 Java 透视图。在“文件”菜单中,选择窗口 > 打开透视图 > Java。
- 打开 datapoolExample 项目属性。在“导航器”或“包资源管理器”窗口中,右键单击
datapoolExample 项目文件夹,然后选择属性。将打开“datapoolExample 的属性”对话框。
- 将 tptp-models.jar 添加到 Java 构建路径中。
-
在左窗格中,选择 Java 构建路径。
- 在右窗格中,选择库选项卡,然后单击添加变量...。将打开“新建变量类路径条目”对话框。
- 选择 ECLIPSE_HOME 变量,然后单击扩展...。将打开“变量扩展”对话框。打开插件 >
org.eclipse.tptp.platform.models_Version
文件夹并选择 tptp-models.jar,其中 Version 是 TPTP 版本号。
- 单击确定以添加该库。
- 将 org.eclipse.emf.common_Version.jar 添加到 Java 构建路径中,其中 Version 是 EMF 版本。
-
在“新建变量类路径条目”对话框中,选择 ECLIPSE_HOME 变量,然后单击扩展...。
- 打开插件文件夹,然后选择 org.eclipse.emf.common_Version.jar,其中 Version 是 EMF 版本。
- 单击确定以添加该库。
- 将 org.eclipse.emf.ecore_Version.jar 添加到 Java 构建路径中,其中 Version 是 EMF 版本。
- 在“新建变量类路径条目”对话框中,选择 ECLIPSE_HOME 变量,然后单击扩展...。
- 打开插件文件夹,然后选择 org.eclipse.emf.ecore_Version.jar,其中 Version 是 EMF 版本。
- 单击确定以添加该库。
- 将 org.eclipse.core.runtime_Version.jar 添加到 Java 构建路径中,其中 Version 是 Eclipse 平台版本。
- 在“新建变量类路径条目”对话框中,选择 ECLIPSE_HOME 变量,然后单击扩展...。
- 打开插件文件夹,然后选择 org.eclipse.core.runtime_Version.jar,其中 Version 是 Eclipse 平台版本。
- 单击确定以添加该库。
- 单击确定以关闭“属性”对话框。
使用数据池 API
在本过程中,您将修改 shoppingCartTest_src 类和 testShoppingCartConstructor 方法,以利用
shoppingCartDatapool。
- 根据需要,打开 Java 透视图。在“文件”菜单中,选择窗口 > 打开透视图 > Java。
- 打开 shoppingCartTest_src.java。在“导航器”中,打开 datapoolExample 项目文件夹并双击 shoppingCartTest_src.java。shoppingCartTest_src.java 的内容将显示在 Java 编辑器中。
- 将下列 import 语句添加到 shoppingCartTest_src 类中。
import org.eclipse.hyades.models.common.datapool.impl.*;
import org.eclipse.hyades.execution.runtime.datapool.*;
- 声明 IDatapoolIterator 类实例。这个类实例将在设置代码中初始化并在测试方法中使用。
public class shoppingCartTest_src extends HyadesTestCase {
IDatapoolIterator dpIterator;
//...
- 修改 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。
- 修改 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();
}
}
- 保存 shoppingCartTest_src.java。从“文件”菜单中,选择文件 > 保存。
- 将数据池添加到 testArtifact 中。
- 打开“测试”透视图。在测试导航器中,双击 testDeployment 以在编辑器中打开它。
- 在配对选项卡中,选择 testAsset,然后单击打开...。
- 在测试资产选项卡中,单击添加...。选择数据池,然后单击确定。保存该资产。
- 使用定制部署来运行测试。
- 打开“测试”透视图。在测试导航器中,右键单击 shoppingCartTest_src 测试套件,然后选择运行方式 > 运行...。将打开“运行配置”对话框。
- 在“运行配置”的左窗格中,选择 shoppingCartTest_src 测试套件。
- 在“运行配置”的右窗格中,选择您在准备工作一节中创建的部署。
- 在“测试日志”选项卡中,清除使用缺省值选项,然后选择 datapoolExample 项目文件夹作为位置。
- 单击运行以启动该测试。
- 双击测试导航器中的新 shoppingCartTest_src 测试日志。将显示 shoppingCartTest_src 测试日志。选择“事件”选项卡以查看测试结果详细信息。