1. 首先导入包。
在pom.xml中加入依赖
org.dbunit
dbunit
2.4.9
test
此时会导入三个包, dbunit, slf4j和commons-collections
2.创建dbunit的数据xml文件
dbunit在创建数据库的时候是根据我们的数据xml文件的内容来创建的。
所以这个文件是必不可少的。
格式如下:
3. 创建dbunit的connection
dbunit需要一个连接数据库的connection,这个connection必须是当前项目的。
public class DbUtil {
public static Connection getCon(){
Connection con=null;
try {
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","admin","123");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
@Test
public void testLoad() throws DatabaseUnitException{
IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
System.out.println(con);
}
[color=red]note: 这里可能会遇到SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
解决方法是加入dependecy
org.slf4j
slf4j-simple
1.7.5
[/color]
4.通过xml数据文件获取DataSet对象。
@Test
public void testLoad() throws DatabaseUnitException{
IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
System.out.println(con);
/*
* FlatXmlDataSet用来获取基于属性存储的属性值
*
*/
IDataSet ds=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(TestDbunit.class.getClassLoader().getResourceAsStream("t_user.xml"))));
System.out.println(ds);
}
5.执行DatabaseOperation的execute,进行数据库操作。
@Test
public void testLoad() throws DatabaseUnitException{
IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
System.out.println(con);
/*
* FlatXmlDataSet用来获取基于属性存储的属性值
*
*/
IDataSet ds=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(TestDbunit.class.getClassLoader().getResourceAsStream("t_user.xml"))));
System.out.println(ds);
//clean_insert表示先把数据库里的所有数据都清空,然后在把t_user.xml的数据插入进去
try
{
DatabaseOperation.CLEAN_INSERT.execute(con, ds);
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这里执行了之后,便会将t_user里的数据按照格式加入到数据库中。
=========================================
这里说一下最常见的一些问题:
[color=red]1.org.dbunit.dataset.NoSuchColumnException: T_USER.USERNAME - (Non-uppercase input column: username) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.[/color]
这种问题属于xml文件里的数据和数据库里的格式不对应。
上面的t_user.username就是xml表里的username.
而数据库里的t_user表中的column名称是name.
dbunit在数据库表中找不到username,便报错了。
[color=red]2. org.dbunit.dataset.NoSuchTableException: t_user
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)[/color]
数据库中没有该table。
dbunit是不会帮助我们建立表格的。(可以看到t_user.xml中只指定了数据库表名和列名,并没有详细的数据格式信息)
在使用dbunit进行测试之前必须手动在数据库中创建表格。或者使用hibernate来创建。
3. 一些乱七八糟的错误: 今天折腾了一下午的错误,就是因为dbunit的数据库的链接是通过我们自定义jdbc的getCon方法的连接。 和Hibernate Spring毫无任何关系。这点要注意。
4. 个人感觉这个东西不熟练的情况下最好不要和实际运行数据库一起使用。本人昨天就把数据库数据带xml的测试数据一起给弄没了。TT