关于SpringSide的DbUnit测试的思考
------》springSide的DbUnitUtils
/**
* Copyright (c) 2005-2010 springside.org.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
* $Id: DbUnitUtils.java 1186 2010-08-29 16:34:10Z calvinxiu $
*/
package com.xx.unit.dao.account;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.dbunit.DatabaseUnitException;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.ext.h2.H2Connection;
import org.dbunit.operation.DatabaseOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springside.modules.utils.PropertiesUtils;
/**
* 使用DBUnit初始化测试用H2嵌入式数据库数据的工具类.
*/
public class DbUnitUtils {
private static Logger logger = LoggerFactory.getLogger(PropertiesUtils.class);
private static ResourceLoader resourceLoader = new DefaultResourceLoader();
/**
* 清除并插入XML数据文件到H2数据库.
*
* XML数据文件中涉及的表在插入数据前会先进行清除.
*
* @param xmlFilePaths 符合Spring Resource路径格式的文件列表.
*/
public static void loadData(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
execute(DatabaseOperation.CLEAN_INSERT, h2DataSource, xmlFilePaths);
}
/**
* 插入XML数据文件到H2数据库.
*/
public static void appendData(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
execute(DatabaseOperation.INSERT, h2DataSource, xmlFilePaths);
}
/**
* 在H2数据库中删除XML数据文件中涉及的表的数据.
*/
public static void removeData(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
execute(DatabaseOperation.DELETE_ALL, h2DataSource, xmlFilePaths);
}
/**
* 在H2数据库中删除XML表示的数据.
*/
public static void removeDataFromXML(DataSource h2DataSource, String... xmlFilePaths) throws Exception {
execute(DatabaseOperation.DELETE, h2DataSource, xmlFilePaths);
}
/**
* 按DBUnit Operation执行XML数据文件的数据.
*
* @param xmlFilePaths 符合Spring Resource路径格式的文件列表.
*/
private static void execute(DatabaseOperation operation, DataSource h2DataSource, String... xmlFilePaths)
throws DatabaseUnitException, SQLException {
IDatabaseConnection connection = new H2Connection(h2DataSource.getConnection(), "");
for (String xmlPath : xmlFilePaths) {
try {
InputStream input = resourceLoader.getResource(xmlPath).getInputStream();
IDataSet dataSet = new FlatXmlDataSetBuilder().setColumnSensing(true).build(input);
operation.execute(connection, dataSet);
} catch (IOException e) {
logger.warn(xmlPath + " file not found", e);
}
}
}
}
springSide的测试用的是 :
DbUnitUtils.loadData(dataSource, "/data/default-data.xml");// 加载xml数据前先清空涉及的表
DbUnitUtils.removeData(dataSourceHolder, "/data/default-data.xml");//删除xml涉及到的表的数据
如果是测试数据库,这么写可以,但如果要在应用数据库上测试(当然实际不太可能)应该用以下方式:
DbUnitUtils.appendData(dataSource, "/data/dbunit.xml"); //在原基础上增加数据
DbUnitUtils.removeDataFromXML(dataSourceHolder, "/data/dbunit.xml");//删除xml中涉及的数据
总结 :DbUnit结合spring测试框架,前者负责准备数据,后者进行测试控制。
------》附 DbUnit导出数据库到XML
package com.test.dbunit;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
public class TestApp {
public static void main(String[] args) throws Exception{
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:h2:tcp://localhost/~/mySpringSide1", "sa", "");
IDatabaseConnection connection = new DatabaseConnection(conn);
QueryDataSet dataSet = new QueryDataSet(connection);
//将整个COMMENTS表里的数据导出到 xml文件里
dataSet.addTable("COMMENTS");
//将ARTICLES表里符合条件的数据导出到xml文件里
dataSet.addTable("ARTICLES","select * from ARTICLES where id < 4");
//导出到dbunit.xml文件里
FlatXmlDataSet.write(dataSet,new FileOutputStream("dbunit.xml"));
}
}
分享到:
相关推荐
springside-3.2.2源码springside-3.2.2源码
springside
pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true
SpringSide4.0 Reference Manual 自己整理的官方文档,PDF格式,方便查阅,所有连接都已整理。
springside4
springside3.0.zip
SpringSide文档.chm。
springside开发全面讲解 springside集成了多项技术,不适合入门者学习,因此本资料也尽量从最简单最基础的讲起。
springside-core-4.3.0.jar 最新版springside-core的jar包
分享 江南白衣的 springside4 非常强大的Javaee 框架。 官网:http://www.springside.org.cn/ 代码:https://github.com/springside/springside4
springside3.3.4 使用方法 ssh整合 最流行的web框架 使用说明
springside示例quickstart的eclipse工程
Springside4 学习整理 Shiro 服务端验证
springside-core-4.1.0.GA的jar包,实际包含springside-core-4.1.0.GA以及springside-core-3.3.4.jar。
springside3-core-3.3.4.jar,springside的3.3.4版本。
springside-joddform-2.0.zip
最近公司要求高maven+springside管理项目,凑合学,总结了一下
SpringSide
java开发依赖 springside-core-4.1.0.GA springside-core-4.1.0.GA.pom.lastUpdated
springside3文档资料收录 calvin,游侠