dbUnit使用

[TOC]

​ DbUnit(http://dbunit.sourceforge.net/ )是专门针对数据库测试框架Junit的一个扩展。本文介绍了使用DbUnit工具让我们在使用Junit测试的时候,不会对数据库造成破坏。本文将会简单的介绍使用dbUnit进行备份和恢复数据操作。

使用DbUnit的步骤:(Maven方式)

1.添加maven依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.4.9</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>

2.使用DbUnit进行插入测试数据

a.创建测试数据(提供数据配置文件dataset.xml,其中t_user为表名,属性为列名)

1
2
3
<dataset>
<t_user id="1" username="admin" password="123" nickname="admin_123"/>
</dataset>

b.创建DbUnit的连接信息(这个连接获取需要依赖项目的连接)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class DbUtil {
private static final String url = "jdbc:mysql://127.0.0.1:3306/db_junit?useUnicode=true" +
"&characterEncoding=UTF-8";
private static final String username = "root";
private static final String password = "root";
public static Connection getConnection() throws SQLException {
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
public static void close(Connection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(PreparedStatement ps) {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet rs) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class TestDbUnit {
@Test
public void testDbUnit() throws SQLException, DatabaseUnitException {
//1.创建dbunit的connection
IDatabaseConnection conn = new DatabaseConnection(DbUtil.getConnection());
//2.获取配置的数据
IDataSet ds = new FlatXmlDataSet(new FlatXmlProducer(new InputSource(TestDbUnit.class
.getResourceAsStream("/dataset.xml"))));
//3.清空数据库,将测试数据添加进去
DatabaseOperation.CLEAN_INSERT.execute(conn,ds);
}
//备份所有的数据
@Test
public void testBackUpAllData() throws SQLException, DatabaseUnitException, IOException {
//1.获取dbunit的连接
IDatabaseConnection conn = new DatabaseConnection(DbUtil.getConnection());
//2.获取数据库中的所有的数据
IDataSet ds = conn.createDataSet();
//3.将dataset数据写入到一个文件中
FlatXmlDataSet.write(ds,new FileWriter("backUp.xml"));
}
//备份部分表
@Test
public void testBackUpSomeTable() throws SQLException, DatabaseUnitException, IOException {
IDatabaseConnection conn = new DatabaseConnection(DbUtil.getConnection());
//创建查询的dataset
QueryDataSet queryDataSet = new QueryDataSet(conn);
queryDataSet.addTable("t_user");
FlatXmlDataSet.write(queryDataSet,new FileWriter("backUp.xml"));
}
//测试恢复
@Test
public void testResume() throws SQLException, DatabaseUnitException {
IDatabaseConnection conn = new DatabaseConnection(DbUtil.getConnection());
IDataSet ds = new FlatXmlDataSet(new FlatXmlProducer(new InputSource("backUp.xml")));
DatabaseOperation.CLEAN_INSERT.execute(conn,ds);
}
}