AbstractDbunitTestCase

来源:互联网 发布:威图网络柜图片 编辑:程序博客网 时间:2024/06/06 17:56



import static org.junit.Assert.assertNotNull;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;


import org.dbunit.DatabaseUnitException;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatDtdDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.dataset.xml.FlatXmlProducer;
import org.dbunit.operation.DatabaseOperation;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.xml.sax.InputSource;






public class AbstractDbUnitTestCase {
public static IDatabaseConnection dbunitCon;
//创建临时文件
private File tempFile;
private File dtdFile;

//初始化数据库连接(每次只会加载一次(对一个类全测试时只会运行一次),必须要静态方法)
@BeforeClass
public static void init () throws DatabaseUnitException, SQLException{
dbunitCon=new DatabaseConnection(DbUtil.getConnection());
}

//得到测试文件(xml)
protected IDataSet createTestXml(String tname) throws DataSetException, FileNotFoundException, IOException{
InputStream is = AbstractDbUnitTestCase
.class
.getClassLoader().getResourceAsStream(tname+".xml");
assertNotNull("dbunit的基本数据文件不存在",is);
//创建DataSet
return new FlatXmlDataSet(new FlatXmlProducer(new InputSource(is),new FlatDtdDataSet(new FileReader(dtdFile))));
}
protected void resumeData() throws DatabaseUnitException, SQLException, IOException{
IDataSet ds = new FlatXmlDataSet(new FlatXmlProducer(
new InputSource(new FileInputStream(tempFile)),new FlatDtdDataSet(new FileReader(dtdFile))));
DatabaseOperation.CLEAN_INSERT.execute(dbunitCon, ds);
}
//拷贝数据库中所有表
protected void backupAllTable() throws Exception{
IDataSet ds=dbunitCon.createDataSet();
backupTable(ds);

}

private  void backupTable(IDataSet ds) throws Exception{
tempFile = File.createTempFile("back", "xml");
dtdFile = File.createTempFile("back","dtd");

//写dtd(为了规范表的字段,主要是为了解决表首语句有字段为空的问题)
FlatDtdDataSet.write(ds, new FileWriter(dtdFile));
//写数据表中的文件
FlatXmlDataSet.write(ds, new FileWriter(tempFile));
}
protected void backupSomeTable(String[]tname) throws Exception{
QueryDataSet qds=new QueryDataSet(dbunitCon);
for(String str:tname){
qds.addTable(str);
}
backupTable(qds);
}

protected void backupOneTable(String tname) throws Exception{
backupSomeTable(new String[]{tname});
}
@AfterClass
public static void destory(){
try{
if(dbunitCon!=null)dbunitCon.close();
}catch(Exception e){
e.printStackTrace();
}
}
}