/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选择不同的测试固件