当前位置:天才代写 > tutorial > JAVA 教程 > JBuilder 2005单位测试之建设测试固件

JBuilder 2005单位测试之建设测试固件

2017-11-13 08:00 星期一 所属: JAVA 教程 浏览:658

副标题#e#

在测试用例中通过setUp()、tearDown()建设测试固件,只能使这个测试固件在单个测试用例的差异测试要领中共用,假如有多个测试用例都需要利用沟通的测试固件,就需要将测试固件抽取到一个独立的类中。JBuilder提供了3个预界说的测试固件类,它们别离是:

·JDBC测试固件(JDBC Fixture):用于获取数据库毗连的测试固件,用户仅需要通过配置一些数据库信息,就可以用利便的要领获取数据毗连。

·JNDI 测试固件(JNDI Fixture):用于模仿从JDNI情况中获取工具的测试固件。

·较量测试固件(Comparision Fixture):将测试输出到外部文件中,以便第二次测试时举办较量。

·自界说测试固件(Custom Fixture):用户自界说的测试固件。

假如对JUnit的框架布局很是相识,也许这些JBuilder扩展的测试固件对你来说意义并不大,它们无非是构建一些常见的测试情况而已,你完全可以本身编写。在本节里,我们先容两个测试固件。

JDBC测试固件

假如你的工程中已经有一个获取数据毗连的民众类,你也有须要构建一个JDBC测试固件,因为JDBC测试固件不单可以直接通过建设测试用例的领导直接指定,另外,JDBC测试固件还提供了很多面向测试的要领。

为了建设JDBC测试固件,我们先建设一个JDataStore的数据库,其数据文件位于<chapter25工程目次>/db/hr.jds,这个数据库的用户名和暗码是:sysdba/123456。hr.jds数据库中有一张EMPLOYEE的表,其布局如下所示:

JBuilder 2005单元测试之建树测试固件

图 错误!文档中没有指定样式的文字。EMPLOYEE表的数据

EMPLOYEE有3个字段,别离是ID、NAME和AGE,别离是String、String和int范例,并按上图所示填入3笔记录。

为了演示JDBC测试固件的详细利用,我们设计两个业务类:Employee和EmployeeDAO,而后用JDBC测试固件为测试EmployeeDAO提供数据毗连。这两个类的代码如下:

代码清单 错误!文档中没有指定样式的文字。Employee.java类

1.package chapter25.db;
2.public class Employee
3.{
4.private String id;
5.private String name;
6.private int age;
7.public Employee(String id, String name, int age) {
8.this.id = id;
9.this.name = name;
10.this.age = age;
11.}
12.public String getId() {
13.return id;
14.}
15.public String getName() {
16.return name;
17.}
18.public int getAge() {
19.return age;
20.}
21.public boolean equals(Object o) {
22.if (o instanceof Employee) {
23.Employee e1 = (Employee) o;
24.return id.equals(e1.getId()) && name.equals(e1.getName()) &&age == e1.getAge();
25.} else {
26.return false;
27.}
28.}
29.}

Employee类用于描写EMPLOYEE表的一笔记录,该类会见数据库的EmployeeDAO代码如下所示:

代码清单 错误!文档中没有指定样式的文字。EmployeeDAO.java类

1.package chapter25.db;
2.import java.sql.*;
3.public class EmployeeDAO
4.{
5.private Connection conn;
6.public EmployeeDAO(Connection conn) {
7.this.conn = conn;
8.}
9.public Employee findById(String id) throws SQLException
10.{
11.String sqlStr = "select * from employee where id ='"+id+"'";
12.Statement stat = conn.createStatement();
13.ResultSet rs = stat.executeQuery(sqlStr);
14.if (rs.next()) {
15.return new Employee(id,rs.getString("name"),rs.getInt("age"));
16.}else{
17.return null;
18.}
19.}
20.}


#p#副标题#e#

为了节减篇幅,我们仅提供一个会见数据库的会见要领:findById(),即通过id查找Employee工具。

下面,我们操作JBuilder领导建设一个JDBC测试固件:

1. File->New…->Test->在Test页中,双击JDBC Fixture图标,启动建设领导,其对话框如下所示:

JBuilder 2005单元测试之建树测试固件

图 错误!文档中没有指定样式的文字。指定JDBC测试固件类名

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

2.配置毗连数据库的信息。

在这步里,JBuilder提供了大部门数据库驱动措施的选择和毗连信息配置,其对话框如下所示:

JBuilder 2005单元测试之建树测试固件

图 错误!文档中没有指定样式的文字。指定命据库毗连信息

·Driver:选择borland.databstore.jdbc.DataStoreDriver类。JDBC测试固件提供了对大大都数据库的支持。个中下拉框中暂不行用的数据库驱动器类显示为赤色,你可以通过设置工程扩展类库使它们可用。

#p#分页标题#e#

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

JBuilder 2005单元测试之建树测试固件

图 错误!文档中没有指定样式的文字。结构DataStore数据毗连URL的对话框

该对话框的配置内容会跟着数据库范例的差异而变革。对付JDataStore数据库,该对话框提供了两个选项,假如数据库文件放在本机上时用第一个配置项,不然用第二个配置项。我们选择第一种选项,点击其后的…按钮,导航到<chapter25工程目次>/db/hr.jds并选择之,按OK返回领导主对话框窗口。

·User name:sysdba。

·Password:123456。

按对话框下的Test Connection测试毗连,应该会返回一个Success信息陈诉毗连测试乐成。按Finish建设JDBC 测试固件,其代码如下所示:

代码清单 错误!文档中没有指定样式的文字。HrJdbcFixture.java

1.package fixture;
2.import java.sql.*;
3.import java.io.*;
4.import com.borland.jbuilder.unittest.JdbcFixture;
5.public class HrJdbcFixture
6.extends JdbcFixture
7.{
8.public HrJdbcFixture(Object obj) {
9.super();
10.super.setUrl("jdbc:borland:dslocal:D:/JTJB2005/chapter25/db/hr.jds");
11.super.setDriver("com.borland.datastore.jdbc.DataStoreDriver");
12.super.setUsername("sysdba");
13.super.setPassword("123456");
14.}
15.
16.public void setUp() {
17.super.setUp();
18.}
19.
20.public void tearDown() {
21.super.tearDown();
22.}
23.}

#p#副标题#e#

JDBC测试固件承继了com.borland.jbuilder.unittest.JdbcFixture,这个类的重要要领包罗:

·dumpResultSet():将一个ResultSet导到一个Writer中,该要领接管两个参数,一个是ResultSet另一个是Writer。

·getConnection():获取一个数据毗连。

·runSqlBuffer():执行缓存于StringBuffer工具中的SQL语句。

·runSqlFile():执行生存在文件中的SQL语句,通过入参指定SQL文件的地点。

·setDriver():配置JDBC驱动器。

·setUrl():配置数据毗连的URL。

·setUsername():配置用户名。

·setPassword():配置暗码。

提示:

通过领导建设JDataStore的JDBC测试固件,固然可以直接在对话框中选择com.borland.datastore.jdbc.DataStoreDriver驱动器,但运行这个JDBC测试固件时,JBuilder却报这样的错误信息:java.lang.ClassNotFoundException: com.borland.datastore.jdbc.DataStoreDriver。本来是JBuilder通过领导建设JDBC测试固件时,并没有直接将驱动器类加载到工程类库中,所以你需要手工通过Project->Project Properties…->Paths中,将JBuilder类库中名为JDataStore类库项加到工程类库中。

由于EMPLOYEE表的数据大概会跟着测试的举办不绝变动,这样在测试时测试法则就很难拟定,因为法则的拟定必需基于一个假设的情况。举个例子,我们此刻要测试findById()要领,就必需知道EMPLOYEE表中有哪些数据,所以在测试开始时就必需建设好一些特定的数据。由于JDBC固件可以执行生存在外部文件中的SQL,所以我们建设一个insert.sql文件,将其安排在<chapter25工程目次>/db/insert.sql下,文件的内容如下:

delete from employee;insert into employee values('0004','大山',23);insert into employee values('0005','精髓',30);insert into employee values('0006','柯明',31);

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

1.在编辑器中激活EmployeeDAO。

2.File->New…->Test->双击Test Case图标启动建设测试用例的领导,在领导第1、2步为EmployeeDAO的建设一个名为TestEmployeeDAO的测试用例,这个测试用例对EmployeeDAO的findById()要领举办成果测试。

3.在领导的第3步选择测试固件,在领导对话框中我们前面建设的HrJdbcFixture已经呈此刻列表中。你也可以通过对话框的Add…和Remove选择差异的测试固件。

JBuilder 2005单元测试之建树测试固件

图 错误!文档中没有指定样式的文字。选择测试固件

按Finish直接建设TestEmployeeDAO的测试用例,其代码如下所示:

代码清单 错误!文档中没有指定样式的文字。TestEmployeeDAO.java,领导建设的测试用例类

#p#分页标题#e#

1.package chapter25.db;
2.import junit.framework.*;
3.import fixture.*;
4.import java.sql.*;
5.public class TestEmployeeDAO extends TestCase {
6.private EmployeeDAO employeeDAO = null;
7.HrJdbcFixture hrJdbcFixture;
8.protected void setUp() throws Exception {
9.super.setUp();
10./**@todo verify the constructors*/
11.employeeDAO = new EmployeeDAO(null);
12.hrJdbcFixture = new HrJdbcFixture(this);
13.hrJdbcFixture.setUp();
14.}
15.
16.protected void tearDown() throws Exception {
17.employeeDAO = null;
18.hrJdbcFixture.tearDown();
19.hrJdbcFixture = null;
20.super.tearDown();
21.}
22.
23.public void testFindById() throws SQLException {
24.String id = "";
25.Employee expectedReturn = null;
26.Employee actualReturn = employeeDAO.findById(id);
27.assertEquals("return value", expectedReturn, actualReturn);
28./**@todo fill in the test code*/
29.}
30.}

#p#副标题#e#

测试用例在setUp()要领中实例化HrJdbcFixture工具,并挪用其setUp()要领初始化情况。只有JDBC测试固件的setUp()要领执行后(第13),才可挪用JDBC测试固件的其他要领,如getConnection()等,所以JDBC测试固件的setUp()是其初始化要领。下面我们对这个TestEmployeeDAO举办改革,改革的代码如下粗体代码所示:

代码清单 错误!文档中没有指定样式的文字。改革后的TestEmployeeDAO类

1.…
2.public class TestEmployeeDAO extends TestCase {
3.…
4.protected void setUp() throws Exception {
5.super.setUp();
6.hrJdbcFixture = new HrJdbcFixture(this);
7.hrJdbcFixture.setUp();
8.employeeDAO = new EmployeeDAO(hrJdbcFixture.getConnection());
9.hrJdbcFixture.runSqlFile("D:/JTJB2005/chapter25/db/insert.sql",true);
10.}
11.…
12.public void testFindById() throws SQLException {
13.Employee expectEmp = new Employee("0004","大山",23);
14.Employee realEmp = employeeDAO.findById("0004");
15.assertNotNull(realEmp);
16.assertEquals(expectEmp,realEmp);
17.}
18.}

因为JDBC测试固件需要在setUp()要领挪用后,其他要领才可用,所以在TestEmployeeDAO的setUp()要领中,我们将EmployeeDAO的实例化要领移到后头,以便实例化EmployeeDAO时可以通过hrJdbcFixture.getConnection()获取数据毗连(第8行)。在第9行,执行insert.sql文件,排除表中本来的数据并插入3行测试数据。

在第13~14行,通过EmployeeDAO的findById()要领查找返回ID为0004的Employee工具,在第15~16行设定两个测试法则。

运行这个带JDBC测试固件的测试用例,HrJbdcFixture测试固件先筹备好测试情况,然后再执行TestEmployeeDAO的testFindById()测试要领。

较量测试固件

较量固件用于记录下当前的测试记录,以便和下一次的输出较量。较量固件类担任于com.borland.jbuilder.unittest.TestRecorder,而TestRecorder类担任java.io.Writer。所以假如在测试时,需要用Writer输出信息就可以思量利用较量固件了,它提供了很多易用的输出信息的要领。你可以通过领导来建设较量固件。

TestRecorder共有 4个记录模式的常量,它们别离是:

·UPDATE:较量固件将当前输出信息和已存在的信息文件对较量,假如文件没有存在则新建设一个文件,记录输出信息。

·COMPARE:较量固件将当前输出的信息和已经存在的信息较量。

·RECORD:较量固件记录当前输出的信息,假如本来已经有输出文件存在,包围之。

·OFF:封锁较量固件的成果。

留意:

在建设记录文件后,假设你变动了测试用例或测试套件,需要从头初始化这个输出文件:将TestRecorder的输出模式配置为RECORD,建设文件后再将其调解为UPDATE。输出的数据文件是二进制文件,放在和源措施文件沟通的目次下且和测试用例类同名。

下面是测试固件常用的要领,先容如下:

·boolean print(String s)

用TestRecorder打印一个字符串,假如模式为RECORD,且这个字符串和本来记录的纷歧致,则返回false。你可以设定这样的测试法则:

assertTrue(recorder.print(result.toString())

·boolean println(String s)

和print()相似,只不外添加一个换行。

·boolean compareObject(Object o)

挪用传入工具的equals()要领和用前面用recordObject()记录的工具举办较量。

·boolean recordObject()

记录一个工具,以便后头挪用compareObject()要领举办较量。

#p#副标题#e#

下面,我们建设一个较量固件,并应用这个较量固件为Employee类建设一个测试用例。

#p#分页标题#e#

1.File->New…->Test->在Test页中,双击Comparision Fixture图标启动建设较量固件类的领导,其对话框如下所示:

JBuilder 2005单元测试之建树测试固件

图 错误!文档中没有指定样式的文字。指定较量固件名及属性

·Class name:测试固件类名,接管默认的ComparisionFixture1。

·Echo output to console:测试固件将信息同时输出到测试运行器的节制台上。

·Verbose output:测试固件将输出具体的信息。

另外,Save comparision data in this directory指定较量输出信息文件的存放位置,可以通过其后的…按钮变动,这里我们接管默认的配置。按OK直接建设较量固件类,你代码如下所示:

代码清单 错误!文档中没有指定样式的文字。?15 ComparisonFixture1.java,领导建设的测试固件类

1.package fixture;
2.import com.borland.jbuilder.unittest.TestRecorder;
3.public class ComparisonFixture1 extends TestRecorder
4.{
5.
6.public ComparisonFixture1(Object obj) {
7.super();
8.super.setMode(UPDATE);
9.super.setVerbose(true);
10.super.setEcho(true);
11.String fileName = super.constructFilename("D:/JTJB2005/chapter25/test",obj);
12.super.setOutputFile(fileName);
13.}
14.
15.public void setUp() {
16.}
17.
18.public void tearDown() {
19.}
20.}

第8行将模式配置为UPDATE,而第9,10行对输出属性作配置。第11~12行指定输出文件的目次。

2.建设TestEmployee测试用例类。

File->New…->Test->在Test页,双击Test Case图标启动建设测试用例领导,为Employee类和结构函数建设TestEmployee测试用例类。在领导的第1步,你将看到如下的对话框:

JBuilder 2005单元测试之建树测试固件

图 错误!文档中没有指定样式的文字。选择测试Employee类的结构函数

点击Next一直到领导的第3步:

JBuilder 2005单元测试之建树测试固件

列表中列出了工程的所有的测试固件,选择HrJdbcFixture,点击Remove删除这个固件,只留下ComparisionFixture1的固件,点击Finish直接建设TestEmployee测试用例类的代码框架,在代码框架基本上操作较量固件对Employee举办测试,其最终代码如下所示:

代码清单 错误!文档中没有指定样式的文字。应用较量固件的测试用例

1.package chapter25.db;
2.
3.import junit.framework.*;
4.import fixture.*;
5.
6.public class TestEmployee extends TestCase {
7.private Employee employee = null;
8.ComparisonFixture1 comparisonFixture1;
9.
10.protected void setUp() throws Exception {
11.super.setUp();
12.employee = new Employee("0004", "王五", 23);
13.comparisonFixture1 = new ComparisonFixture1(this);
14.comparisonFixture1.setUp();
15.}
16.
17.protected void tearDown() throws Exception {
18.employee = null;
19.comparisonFixture1.tearDown();
20.comparisonFixture1 = null;
21.super.tearDown();
22.}
23.
24.public void testEmployee() {
25.String id = "0004";
26.String name = "王五";
27.int age = 23;
28.comparisonFixture1.print(employee.getId());
29.comparisonFixture1.recordObject(employee);
30.employee = new Employee(id, name, age);
31.assertTrue(comparisonFixture1.print(employee.getId()));
32.assertTrue(comparisonFixture1.compareObject(employee));
33.}
34.}

在第12行实例化一个Employee工具,在第28行保持并打印出原employee工具的id值,在第31行举办较量;第29行记录原employee工具,在第31行举办两工具的较量。

运行TestEmployee类,在测试运行器的测试输出标签页中,你将可以看到输出的信息,在测试用例地址的文件夹下将建设一个无后缀名的输出文件Employee。

 

    关键字:

天才代写-代写联系方式