dbunit入门 (一)基础实例

1. 首先导入包。
在pom.xml中加入依赖

<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.4.9</version>
<scope>test</scope>
</dependency>


此时会导入三个包, dbunit, slf4j和commons-collections

2.创建dbunit的数据xml文件

dbunit在创建数据库的时候是根据我们的数据xml文件的内容来创建的。
所以这个文件是必不可少的。
格式如下:
<?xml version="1.0" encoding="utf-8"?>
<dataset>
<!-- 这是基于属性的节点存储方式 -->
<tablename column_name="data" column_name2="data2"/>

<t_user id="1" username="alleni" password="123"/>
<!-- 一个xml文件可以存放多个数据库table的内容-->

</dataset>


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

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.5</version>
</dependency>
[/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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值