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里的数据按照格式加入到数据库中。
=========================================
这里说一下最常见的一些问题:
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.
这种问题属于xml文件里的数据和数据库里的格式不对应。
上面的t_user.username就是xml表里的username.
而数据库里的t_user表中的column名称是name.
dbunit在数据库表中找不到username,便报错了。
2. org.dbunit.dataset.NoSuchTableException: t_user
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)
数据库中没有该table。
dbunit是不会帮助我们建立表格的。(可以看到t_user.xml中只指定了数据库表名和列名,并没有详细的数据格式信息)
在使用dbunit进行测试之前必须手动在数据库中创建表格。或者使用hibernate来创建。
3. 一些乱七八糟的错误: 今天折腾了一下午的错误,就是因为dbunit的数据库的链接是通过我们自定义jdbc的getCon方法的连接。 和Hibernate Spring毫无任何关系。这点要注意。
4. 个人感觉这个东西不熟练的情况下最好不要和实际运行数据库一起使用。本人昨天就把数据库数据带xml的测试数据一起给弄没了。TT
分享到:
相关推荐
数据集是 DBUnit 的基础,它通常是一个 XML 文件或者 CSV 文件,描述了测试用例中的预期数据库状态。这些文件包含了表的行和列,模拟了数据库中的数据。操作模式则定义了如何将数据集加载到数据库,比如 `CLEAN_...
**DbUnit 入门指南** DbUnit 是一个用于数据库测试的开源 Java 工具,它提供了数据驱动测试的框架,可以有效地管理和填充测试数据库。在软件开发中,尤其是在进行单元测试时,确保数据库状态的一致性至关重要。...
DbUnit 入门实战 DbUnit 是一个专门针对数据库测试的 JUnit 扩展,它可以将测试对象数据库置于一个测试轮回之间的状态。DbUnit 的设计理念是,在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,...
- **扩展性**:能够与第三方工具或框架(如Mockito、Dbunit等)良好配合,以支持模拟对象、断言和数据库操作等功能。 ##### 2. 测试框架的对比 - **JUnit**: JUnit是最早也是最广泛使用的Java单元测试框架之一,...
SpringSide是一个基于Spring框架的开源项目,旨在为Java开发者提供一个快速入门Spring的实例。这个压缩包中的springside-3.1.3.1-src是该项目的源代码,是学习和研究Spring框架整合的经典示例。 1. **Spring框架**...
接着,通过一系列实例,详细解释了如何创建会话、管理事务、执行CRUD操作等基础操作。这些基础知识是理解和使用Hibernate的前提,对于初学者尤为重要。 ### 高级特性与最佳实践 随着学习的深入,书中的内容也逐渐...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...