dbunit excel是怎样对数据库操作的

dbunit 用来做数据库数据的导入导出 - huangxx - ITeye技术网站
博客分类:
比较有用的文档地址:
import java.io.FileNotFoundE
import java.io.FileOutputS
import java.io.IOE
import java.sql.C
import java.sql.DriverM
import java.sql.SQLE
import java.util.HashS
import java.util.I
import java.util.M
import java.util.S
import org.dbunit.DatabaseUnitE
import org.dbunit.database.DatabaseC
import org.dbunit.database.DatabaseC
import org.dbunit.database.ForwardOnlyResultSetTableF
import org.dbunit.database.IDatabaseC
import org.dbunit.database.QueryDataS
import org.dbunit.dataset.CachedDataS
import org.dbunit.dataset.DataSetE
import org.dbunit.dataset.IDataS
import org.dbunit.dataset.stream.IDataSetP
import org.dbunit.dataset.stream.StreamingDataS
import org.dbunit.dataset.xml.FlatXmlDataS
import org.dbunit.dataset.xml.FlatXmlP
import org.dbunit.dataset.xml.XmlDataS
import org.dbunit.dataset.xml.XmlP
import org.dbunit.operation.DatabaseO
import org.xml.sax.InputS
public abstract class DBXMLHelper {
public static void exportPartial(IDatabaseConnection connection,
String fileName, Set tableNames, Map sqls, boolean streamed,
boolean flat) throws SQLException, DataSetException,
FileNotFoundException, IOException {
connection.getConfig().setFeature(
DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);
if (streamed)
connection.getConfig().setProperty(
DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY,
new ForwardOnlyResultSetTableFactory());
QueryDataSet partialDataSet = new QueryDataSet(connection);
if (null != tableNames)
for (Iterator it = tableNames.iterator(); it.hasNext();) {
partialDataSet.addTable((String) it.next());
if (null != sqls)
for (Iterator it = sqls.keySet().iterator(); it.hasNext();) {
String key = (String) it.next();
partialDataSet.addTable(key, (String) sqls.get(key));
FlatXmlDataSet
.write(partialDataSet, new FileOutputStream(fileName));
XmlDataSet.write(partialDataSet, new FileOutputStream(fileName));
public static void exportDatabase(IDatabaseConnection connection,
String fileName, boolean streamed, boolean flat)
throws SQLException, DatabaseUnitException, FileNotFoundException,
IOException {
if (streamed)
connection.getConfig().setProperty(
DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY,
new ForwardOnlyResultSetTableFactory());
IDataSet fullDataSet = connection.createDataSet();
FlatXmlDataSet.write(fullDataSet, new FileOutputStream(fileName));
XmlDataSet.write(fullDataSet, new FileOutputStream(fileName));
public static void refreshData(IDatabaseConnection connection,
String input, boolean streamed, boolean flat)
throws DatabaseUnitException, SQLException {
IDataSet dataS
producer = new FlatXmlProducer(new InputSource(input));
producer = new XmlProducer(new InputSource(input));
if (streamed)
dataSet = new StreamingDataSet(producer);
dataSet = new CachedDataSet(producer);
DatabaseOperation.REFRESH.execute(connection, dataSet);
public static void cleanInsertData(IDatabaseConnection connection,
String input, boolean flat) throws DatabaseUnitException,
SQLException {
IDataSet dataS
producer = new FlatXmlProducer(new InputSource(input));
producer = new XmlProducer(new InputSource(input));
dataSet = new CachedDataSet(producer);
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
找到了关于外键约束的另外的解决办法使用CsvDataSetWriter来替代FlatXmlDataSet就可以避免外键约束的问题。jim 写道找到了关于外键约束的另外的解决办法使用CsvDataSetWriter来替代FlatXmlDataSet就可以避免外键约束的问题。这么老的文章也能找到?huangxx 写道找到了关于外键约束的另外的解决办法使用CsvDataSetWriter来替代FlatXmlDataSet就可以避免外键约束的问题。jim 写道找到了关于外键约束的另外的解决办法使用CsvDataSetWriter来替代FlatXmlDataSet就可以避免外键约束的问题。这么老的文章也能找到?什么用CsvDataSetWriter,用依赖方式导出表数据即可。TablesDependencyHelper.getAllDependentTables(connection, "表名");
找到了关于外键约束的另外的解决办法使用CsvDataSetWriter来替代FlatXmlDataSet就可以避免外键约束的问题。
这么老的文章也能找到?
浏览: 201826 次
whichisnotuse 写道非也, 除非需要很执行一段代码 ...
一直while的话会不会太耗内存呢?
&type-mapping&
&sql-t ...
xy2401 写道额,原来配置文件可以改啊。。。不过我已经生成 ...
你好, 我已经找到原因了! 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
DbUnit 在数据库测试中的应用
下载积分:800
内容提示:DbUnit 在数据库测试中的应用
文档格式:PDF|
浏览次数:4|
上传日期: 17:03:32|
文档星级:
该用户还上传了这些文档
DbUnit 在数据库测试中的应用.PDF
官方公共微信您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
数据库操作单元测试.doc22页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:100 &&
你可能关注的文档:
··········
··········
数据库单元测试
目录 1. 测试环境的搭建(DBunit+HSQLDB) 1
1.1. DBunit的简介 1
1.1.1. DBunit简单介绍和原理 1
1.1.2. DBunit的三大核心组件 1
1.1.3. DBunit的安装使用 2
1.2. HSQLDB简介 3
1.2.2. 什么是HSQLDB 3
1.2.3. HSQLDB安装和使用 5
1.2.4. HSQLDB使用 7
1.2.5. HSLDB的使用注意事项 8
2. 数据库单元测试测试流程介绍 1
2.1. 数据库单元测试的原因 1
2.2. 测试关注点 1
2.3. 测试流程 1
3. 数据库单元测试最佳实践 2
3.1. 数据库单元测试最佳实践 2
3.1.1. 从“易测试的”应用程序体系结构开始。 2
3.1.2. 使用精确的断言。 2
3.1.3. 外化断言数据。 3
3.1.4. 编写全面的测试。 4
3.1.5. 创建稳定、有意义的测试数据集。 5
3.1.6. 创建专用的测试库。 6
3.1.7. 有效地隔离测试。 7
3.1.8. 分割测试套件。 8
3.1.9. 使用适当的框架(如 DbUnit)简化过程。 9
3.2. DBunit使用最佳实践 9
3.2.1. 每一个开发人员需要搞一个数据库实例。 9
3.2.2. 使用XML文件作为DataSet 9
3.2.3. DBUnit的最佳实践是尽可能使用最小的数据集。 10
3.2.4. DatabaseOperation.CLEAN_INSERT 策略 10
3.2.5. 为相互关联的测试场景创建多个种子文件是一个很有效的策略. 10
3.3. 自我总结 10
3.3.1. 对各种类型的方法的测试策略: 10
3.3.2. 写一个基TestCase。 10
3.3.3. 测试数据库的有效方法。 10
3.3.4. seed文件的设置 10
3.3.5. 一般的测试的步骤 11
4. 数据库单元测试指南 12
4.1. 测试代码的包结构 12
4.2. 对于各种类型方法的测试策略 12
4.2.1. 查询类的方法 15
4.2.2. 更新类的方法 17
5. 参考资料 1
测试环境的搭建(DBunit+HSQLDB)
DBunit的简介
DBunit简单介绍和原理
为依赖于其他外部系统(如数据库或其他接口)的代码编写单元测试是一件很困难的工作。在这种情况下,有效的单元必须隔离测试对象和外部依
正在加载中,请稍后...DbUnit数据库测试
/question/9701490.html
/course/3_program/java/javashl/143.html
DbUnit:专 门针对数据库测试,能够极大的提高数据库测试的效率.
DbUnit设计理念
DBUnit的设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状
而且又因为DBUnit是对JUnit的一种扩展,开发人员可以通过创建测试用例代码,在这些测试用例的生命周期内来对数据库的操作结果进行比较。
DbUnit测试基本概念和流程
基于DbUnit 的测试的主要接口是IDataSet。IDataSet代表一个或多个表的数据。
可以将数据库模式的全部内容表示为单个IDataSet 实例。这些表本身由Itable 实例来表示。
IDataSet 的实现有很多,每一个都对应一个不同的数据源或加载机制。最常用的几种 IDataSet实现为:
FlatXmlDataSet:数据的简单平面文件 XML 表示
QueryDataSet:用 SQL 查询获得的数据
DatabaseDataSet:数据库表本身内容的一种表示
XlsDataSet :数据的excel表示
一般而言,使用DbUnit进行单元测试的流程如下:
1 根据业务,做好测试用的准备数据和预想结果数据,通常准备成xml格式文件。
2 在setUp()方法里边备份数据库中的关联表。
3 在setUp()方法里边读入准备数据。
4 对测试类的对应测试方法进行实装:执行对象方法,把数据库的实际执行结果和预想结果进行比较。
5 在tearDown()方法里边,把数据库还原到测试前状态。
DbUnit开发实例
下面通过一个实例来说明DbUnit的实际运用。
比如有一个学生表[student],结构如下:
id char(4) pk 学号
name char(50) 姓名
sex char(1) 性别
birthday date 出生日期
准备数据如下:
id name sex birthday
0001 翁仔 m
0002 王翠花 f
测试对象类为StudentOpe.java,里边有2个方法:
findStudent(String id) :根据主键id找记录
addStudent(Student student) :添加一条记录
在测试addStudent方法时候,我们准备添加如下一条数据
id name sex birthday
0088 王耳朵 m
那么在执行该方法后,数据库的student表里的数据是这样的:
id name sex birthday
0001 翁仔 m
0002 王翠花 f
0088 王耳朵 m
然后我们说明如何对这2个方法进行单元测试。
1 把准备数据和预想数据转换成xml文件
student_pre.xml
&?xml version='1.0'
encoding="gb2312"?&
&student id="0001" name="翁仔" sex="m"
birthday=""/&
&student id="0002" name="王翠花" sex="f"
birthday=""/&
&/dataset&
student_exp.xml
&?xml version='1.0'
encoding="gb2312"?&
&student id="0001" name="翁仔" sex="m"
birthday=""/&
&student id="0002" name="王翠花" sex="f"
birthday=""/&
&student id="0088" name="王耳朵" sex="m"
birthday=""/&
&/dataset&
2 实装setUp方法,详细见代码注释。
protected void setUp() {
IDatabaseConnection connection =
super.setUp();
//本例使用postgresql数据库
Class.forName("org.postgresql.Driver");
Connection
conn=DriverManager.getConnection("jdbc:postgresql:testdb.test","postgres","postgres");
//获得DB连接
connection =new DatabaseConnection(conn);
//对数据库中的操作对象表student进行备份
QueryDataSet backupDataSet = new QueryDataSet(connection);
backupDataSet.addTable("student");
file=File.createTempFile("student_back",".xml");//备份文件
FlatXmlDataSet.write(backupDataSet,new
FileOutputStream(file));
//准备数据的读入
IDataSet dataSet = new FlatXmlDataSet( new
FileInputStream("student_pre.xml"));
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);
}catch(Exception e){
e.printStackTrace();
if(connection!=null) connection.close();
}catch(SQLException e){}
3 实装测试方法,详细见代码注释。
*检索类方法,可以利用assertEquals()方法,拿表的字段进行比较。
// findStudent
public void testFindStudent() throws Exception{
//执行findStudent方法
StudentOpe studentOpe=new StudentOpe();
Student result = studentOpe.findStudent("0001");
//预想结果和实际结果的比较
assertEquals("翁仔",result.getName());
assertEquals("m",result.getSex());
assertEquals("",result.getBirthDay());
*更新,添加,删除等方法,可以利用Assertion.assertEquals()方法,拿表的整体来比较。
public void testAddStudent() throws Exception{
//执行addStudent方法
StudentOpe studentOpe=new StudentOpe();
//被追加的记录
Student newStudent = new
Student("0088","王耳朵","m","");
//执行追加方法
Student result = studentOpe.addStudent(newStudent);
//预想结果和实际结果的比较
IDatabaseConnection connection=
//预期结果取得
IDataSet expectedDataSet = new FlatXmlDataSet(new
FileInputStream("student_exp.xml"));
ITable expectedTable = expectedDataSet.getTable("student");
//实际结果取得
Connection conn=getConnection();
connection =new DatabaseConnection(conn);
IDataSet databaseDataSet = connection.createDataSet();
ITable actualTable = databaseDataSet.getTable("student");
Assertion.assertEquals(expectedTable, actualTable);
if(connection!=null) connection.close();
*如果在整体比较表的时候,有个别字段不需要比较,可以用DefaultColumnFilter.excludedColumnsTable()方法,
将指定字段给排除在比较范围之外。比如上例中不需要比较birthday这个字段的话,那么可以如下代码所示进行处理:
ITable filteredExpectedTable =
DefaultColumnFilter.excludedColumnsTable(expectedTable, new
String[]{"birthday"});
ITable filteredActualTable =
DefaultColumnFilter.excludedColumnsTable(actualTable,new
String[]{"birthday"});
Assertion.assertEquals(filteredExpectedTable,
filteredActualTable);
4 在tearDown()方法里边,把数据库还原到测试前状态
protected void tearDown() throws Exception{
IDatabaseConnection connection =
super.tearDown();
Connection conn=getConnection();
connection =new DatabaseConnection(conn);
IDataSet dataSet = new FlatXmlDataSet(file);
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);
}catch(Exception e){
e.printStackTrace();
if(connection!=null) connection.close();
}catch(SQLException e){}
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。DBUnit入门级教程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
DBUnit入门级教程
自​己​研​究​D​B​U​n​i​t​的​一​些​心​得​,​和​新​手​入​门​时​候​需​要​注​意​的​东​西​~
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 dbunit excel 的文章

 

随机推荐