电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

JBuilder2005单元测试之创建测试固件


发布日期:2023/3/26
 

在测试用例中通过setUp()tearDown()创建测试固件只能使这个测试固件在单个测试用例的不同测试方法中共用如果有多个测试用例都需要使用相同的测试固件就需要将测试固件抽取到一个独立的类中JBuilder提供了个预定义的测试固件类它们分别是

·JDBC测试固件(JDBC Fixture)用于获取数据库连接的测试固件用户仅需要通过设置一些数据库信息就可以用方便的方法获取数据连接

·JNDI 测试固件(JNDI Fixture)用于模拟从JDNI环境中获取对象的测试固件

·比较测试固件(Comparision Fixture)将测试输出到外部文件中以便第二次测试时进行比较

·自定义测试固件(Custom Fixture)用户自定义的测试固件

如果对JUnit的框架结构非常了解也许这些JBuilder扩展的测试固件对你来说意义并不大它们无非是构建一些常见的测试环境罢了你完全可以自己编写在本节里我们介绍两个测试固件

JDBC测试固件

如果你的工程中已经有一个获取数据连接的公共类你也有必要构建一个JDBC测试固件因为JDBC测试固件不但可以直接通过创建测试用例的向导直接指定此外JDBC测试固件还提供了许多面向测试的方法

为了创建JDBC测试固件我们先创建一个JDataStore的数据库其数据文件位于/db/hrjds这个数据库的用户名和密码是sysdba/hrjds数据库中有一张EMPLOYEE的表其结构如下所示

EMPLOYEE有个字段分别是IDNAME和AGE分别是StringString和int类型并按上图所示填入条记录

为了演示JDBC测试固件的具体使用我们设计两个业务类Employee和EmployeeDAO尔后用JDBC测试固件为测试EmployeeDAO提供数据连接这两个类的代码如下

代码清单 错误!文档中没有指定样式的文字Employeejava类

package chapterdb;

public class Employee

{

private String id;

private String name;

private int age;

public Employee(String id String name int age) {

thisid = id;

thisname = name;

thisage = age;

}

public String getId() {

return id;

}

public String getName() {

return name;

}

public int getAge() {

return age;

}

public boolean equals(Object o) {

if (o instanceof Employee) {

Employee e = (Employee) o;

return idequals(egetId()) && nameequals(egetName()) &&age == egetAge();

} else {

return false;

}

}

}

Employee类用于描述EMPLOYEE表的一条记录该类访问数据库的EmployeeDAO代码如下所示

代码清单 错误!文档中没有指定样式的文字EmployeeDAOjava类

package chapterdb;

import javasql*;

public class EmployeeDAO

{

private Connection conn;

public EmployeeDAO(Connection conn) {

nn = conn;

}

public Employee findById(String id) throws SQLException

{

String sqlStr = select * from employee where id =+id+;

Statement stat = conncreateStatement();

ResultSet rs = statexecuteQuery(sqlStr);

if (rsnext()) {

return new Employee(idrsgetString(name)rsgetInt(age));

}else{

return null;

}

}

}

为了节省篇幅我们仅提供一个访问数据库的访问方法findById()即通过id查找Employee对象

下面我们利用JBuilder向导创建一个JDBC测试固件

. File>New>Test>在Test页中双击JDBC Fixture图标启动创建向导其对话框如下所示

educitycn/img_///jpg>

在Class name中为JDBC测试固件指定类名HrJdbcFixture接受其他的默认设置按Next到下一步

.设置连接数据库的信息

在这步里JBuilder提供了大部分数据库驱动程序的选择和连接信息设置其对话框如下所示

educitycn/img_///jpg>

·Driver选择borlanddatabstorejdbcDataStoreDriver类JDBC测试固件提供了对大多数数据库的支持其中下拉框中暂不可用的数据库驱动器类显示为红色你可以通过配置工程扩展类库使它们可用

·URL点击其后的…按钮弹出Create URL for DataStore对话框如下图所示

educitycn/img_///jpg>

该对话框的设置内容会随着数据库类型的不同而变化对于JDataStore数据库该对话框提供了两个选项如果数据库文件放在本机上时用第一个设置项否则用第二个设置项我们选择第一种选项点击其后的…按钮导航到工程目录>/db/hrjds并选择之按OK返回向导主对话框窗口

·User namesysdba

·Password

按对话框下的Test Connection测试连接应该会返回一个Success信息报告连接测试成功按Finish创建JDBC 测试固件其代码如下所示

代码清单 错误!文档中没有指定样式的文字HrJdbcFixturejava

package fixture;

import javasql*;

import javaio*;

import comborlandjbuilderunittestJdbcFixture;

public class HrJdbcFixture

extends JdbcFixture

{

public HrJdbcFixture(Object obj) {

super();

supersetUrl(jdbc:borland:dslocal:D:/JTJB/chapter/db/hrjds);

supersetDriver(comborlanddatastorejdbcDataStoreDriver);

supersetUsername(sysdba);

supersetPassword();

}

public void setUp() {

supersetUp();

}

public void tearDown() {

supertearDown();

}

}

JDBC测试固件承继了comborlandjbuilderunittestJdbcFixture这个类的重要方法包括

·dumpResultSet()将一个ResultSet导到一个Writer中该方法接受两个参数一个是ResultSet另一个是Writer

·getConnection()获取一个数据连接

·runSqlBuffer()执行缓存于StringBuffer对象中的SQL语句

·runSqlFile()执行保存在文件中的SQL语句通过入参指定SQL文件的地址

·setDriver()设置JDBC驱动器

·setUrl()设置数据连接的URL

·setUsername()设置用户名

·setPassword()设置密码

提示

通过向导创建JDataStore的JDBC测试固件虽然可以直接在对话框中选择comborlanddatastorejdbcDataStoreDriver驱动器但运行这个JDBC测试固件时JBuilder却报这样的错误信息javalangClassNotFoundException: comborlanddatastorejdbcDataStoreDriver原来是JBuilder通过向导创建JDBC测试固件时并没有直接将驱动器类加载到工程类库中所以你需要手工通过Project>Project Properties>Paths中将JBuilder类库中名为JDataStore类库项加到工程类库中

由于EMPLOYEE表的数据可能会随着测试的进行不断更改这样在测试时测试规则就很难制定因为规则的制定必须基于一个假设的环境举个例子我们现在要测试findById()方法就必须知道EMPLOYEE表中有哪些数据所以在测试开始时就必须创建好一些特定的数据由于JDBC固件可以执行保存在外部文件中的SQL所以我们创建一个insertsql文件将其放置在工程目录>/db/insertsql下文件的内容如下

delete from employee;insert into employee values(大山);insert into employee values(英华);insert into employee values(柯明);

运行这个SQL语句时先清空EMPLOYEE表中的数据然后再插入条特定的记录下面我们来创建应用JDBC测试固件的TestEmployeeDAO测试用例类

.在编辑器中激活EmployeeDAO

.File>New>Test>双击Test Case图标启动创建测试用例的向导在向导第步为EmployeeDAO的创建一个名为TestEmployeeDAO的测试用例这个测试用例对EmployeeDAO的findById()方法进行功能测试

.在向导的第步选择测试固件在向导对话框中我们前面创建的HrJdbcFixture已经出现在列表中你也可以通过对话框的Add和Remove选择不同的测试固件

上一篇:轻松从VB转向基于Swing的开发平台

下一篇:关于JFreeChart的二三事