51Testing丛书连载:(十) 互联网单元测试及实践

发表于:2008-8-19 16:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈卫俊 赵璨 周磊等    来源:51Testing软件测试网

  7.2.1  用DbUnit插入测试数据
  DbUnit支持多种方式向数据库中插入数据,例如FlatXmlDataSet,DTDDataSet等等。这里采用最常用的FlatXmlDataSet。顾名思义,这种方式就是用XML的方式准备数据,DbUnit载入XML文件并完成插入数据库的操作。
  首先需要准备一份XML的数据文件,格式如下:
  代码7.3  数据文件dataset.xml

1   <?xml version="1.0" encoding="GB2312"?>

2   <dataset>

3       <TABLE id="001" name="mike" />

4       <TABLE id="002" name="jack" />

5   </dataset>

  第2行,dataset标签是XML的根节点,对应于DbUnit中的一个FlatXmlDataSet对象。
  第3行,表示要插入的一条记录。其中表名为TABLE,插入的字段为id、name,对应的值分别为“001”、“mike”。整个XML文件一共插入两条记录。

  注意:XML文件中的值必须用双引号,DbUnit会根据实际的表结构进行类型转换。DbUnit无法插入空值,只能跳过该字段。接下来要做的就是载入这份数据文件。
  代码7.4  载入XML文件中的数据

1  public IDataSet getDataSet(String path) {
2  FlatXmlDataSet dataSet = null;
3  try {
4   dataSet = new FlatXmlDataSet(new FileInputStream(new File (path)));
5  } catch (Exception e) {
6   e.printStackTrace();
7  }
8  return dataSet;
9 }

  第2行,声明一个FlatXmlDataSet对象用来装载测试数据。
  第4行,用FlatXmlDataSet的构造函数读取path指定的文件来初始化dataSet对象。
  第8行,返回载有数据的对象。
  最后就是连接数据库,将对象中的数据插到数据库中。代码7.5给出了一份较完整的代码。
  代码7.5  DbUnit.java——insertData

01 package util;
02 
03 ...
04 
05 public class DbUnit {
06  private IDatabaseTester databaseTester;
07 
08  private IDatabaseConnection connection;
09 
10  private QueryDataSet queryDataSet;
11 
12  private String driver;
13 
14  private String url;
15 
16  private String user;
17 
18  private String password;
19 
20  private Connection jdbcConnection;
21 
22  public DbUnit() {}
23 
24  public DbUnit(String driver, String url, String user, String password) {
25 
26   try {
27    Class driverClass = Class.forName(driver);
28    jdbcConnection = DriverManager.getConnection(url, user, password);
29   } catch (Exception e) {
30    e.printStackTrace();
31   }
32  }
33 
34  public void setSchema(String schema) throws SQLException {
35   connection = new DatabaseConnection(jdbcConnection, schema);
36  }
37 
38  public void insertData(IDataSet dataSet) {
39   try {
40    //DatabaseOperation.DELETE.execute(connection, dataSet);
41    DatabaseOperation.INSERT.execute(connection, dataSet);
42   } catch (Exception e) {
43    e.printStackTrace();
44   }
45  }
46 
47  public void deleteData(IDataSet dataSet) {
48   try {
49    DatabaseOperation.DELETE.execute(connection, dataSet);
50   } catch (Exception e) {
51    e.printStackTrace();
52   }
53  }
54 
55  public void updateData(IDataSet dataSet) {
56   try {
57    DatabaseOperation.UPDATE.execute(connection, dataSet);
58   } catch (Exception e) {
59    e.printStackTrace();
60   }
61  }
62 }
63 
64 public QueryDataSet getQueryDataSet() {
65  return queryDataSet;
66 }
67 
68 public IDataSet getDataSet(String path) {
69  FlatXmlDataSet dataSet = null;
70  try {
71   dataSet = new FlatXmlDataSet(new FileInputStream(new File (path)));
72  } catch (Exception e) {
73   // TODO Auto-generated catch block
74   e.printStackTrace();
75  }
76  return dataSet;
77 }

 

  第24~32行,建立一个jdbc连接到指定的数据库,DbUnit将jdbcConnection对象封装成自身的通用数据库接口对象IDatabaseConnection。
  第34~36行,定义setSchema方法完成不同schema之间的切换。
  第38~45行,传入数据库连接和数据这个两参数,执行INSERT操作完成最终的插入动作。DatabaseOpeartion中还定义了UPDATE、DELETE等其他常用操作,这些操作都是DatabaseOperation类中的静态成员对象。DbUnit中的具体实现这里就不细讲了,有兴趣的可以参考DbUnit源代码。

 

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号