DBUnit最佳实践之使用ant命令

在做测试之前,我们需要对数据进行备份,用DBUnit可以很方便的对数据库中的数据进行备份和恢复。

下面我们来看看如何通过ant脚本命令才实现。

 

目录结构

  • 项目结构图
  • 需要用到的jar
  • 运行前准备
  • 运行与结果
  • 源代码
    1. Ant编译文件
    2. 数据库脚本
  • 参考文档
  • 完整项目源代码

项目结构图
DBUnit最佳实践之使用ant命令
 

 

需要用到的jar

  1. commons-logging-1.1.1.jar
  2. dbunit-2.4.8.jar
  3. junit-4.9b2.jar
  4. mysql-connector-java-3.1.12-bin.jar
  5. slf4j-api-1.6.1.jar
  6. slf4j-jcl-1.6.1.jar

运行前准备

  1. 在MySQL的客户端,如Navicat Premium中执行sql文件夹中的dbup.sql文件,创建数据库和表;
  2. 打开Ant面板,eclipse中,Window -> Show View -> Others,然后输入 ant,选ant,然后点【OK】按钮;
  3. 将build.xml拖拽到Ant面板;

运行与结果

  1. 选择Ant面板中的dbunit-ant,点击三角箭头,可以看到不同的target;
  2. 选择export-all:
    执行编译:点击右键,Run As -> Ant Build;
    执行结果:导出所有表的数据至xml文件,存放在data/all-data.xml中;
  3. 选择import-all:
    执行编译:点击右键,Run As -> Ant Build;
    执行结果:导入data/all-data.xml文件中的数据到数据库中;
  4. 选择export-table-student:
    执行编译:点击右键,Run As -> Ant Build;
    执行结果:导出student表的查询结果及user表的全部数据到data/export-student.xml中;
  5. 选择compare:
    执行编译:点击右键,Run As -> Ant Build;
    执行结果:比对数据库中的数据与data/init-data.xml文件中的数据。

源代码

Ant编译文件

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="dbunit-ant" basedir="." default="">
	<property name="db.driver" value="com.mysql.jdbc.Driver" />
	<property name="db.url" value="jdbc:mysql://127.0.0.1:3306/dbup?characterEncoding=UTF-8" />
	<property name="db.username" value="root" />
	<property name="db.password" value="1234" />

	<path id="classpath">
		<fileset dir="${basedir}/libs/">
			<include name="*.jar" />
		</fileset>
	</path>

	<taskdef name="dbunit" classname="org.dbunit.ant.DbUnitTask" classpathref="classpath" />

	<!-- 导出所有数据到xml文件-->
	<target name="export-all">
		<dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true">
			<export format="xml" dest="data/all-data.xml" />
		</dbunit>
	</target>

	<!-- 导出查询结果和表数据到xml文件-->
	<target name="export-table-student">
		<dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true">
			<export format="xml" dest="data/export-student.xml">
				<query name="student" sql="SELECT id, name, sex, birthday FROM STUDENT WHERE id=1" />
				<table name="user" />
			</export>
		</dbunit>
	</target>

	<!-- 比对数据库中的数据与data/init-data.xml文件中的数据 -->
	<target name="compare">
		<dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true">
			<compare format="xml" src="data/init-data.xml" />
		</dbunit>
	</target>

	<!-- 导入data/all-data.xml文件中的数据到数据库中 -->
	<target name="import-all">
		<dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true">
			<operation format="xml" type="CLEAN_INSERT" src="data/all-data.xml" />
		</dbunit>
	</target>

</project>

 

数据库脚本

dbup.sql

/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50525
Source Host           : localhost:3306
Source Database       : dbup

Target Server Type    : MYSQL
Target Server Version : 50525
File Encoding         : 65001

Date: 2014-10-11 14:27:06
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `role`
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
  `id` varchar(20) NOT NULL DEFAULT '',
  `roleName` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES ('1', '管理员');
INSERT INTO `role` VALUES ('2', '普通用户');

-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` varchar(20) NOT NULL DEFAULT '',
  `name` varchar(20) DEFAULT NULL,
  `sex` varchar(10) DEFAULT NULL,
  `birthday` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '2', '3', '4');

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` varchar(20) NOT NULL DEFAULT '',
  `name` varchar(20) DEFAULT NULL,
  `role_id` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ref_id` (`role_id`),
  CONSTRAINT `ref_id` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '张三', '1');
INSERT INTO `user` VALUES ('2', '李四', '2');

 

 

参考文档

  1. 使用DBUnit进行数据库备份与恢复
  2. 用DBUnit做数据备份恢复工具

完整源代码

你可能感兴趣的:(dbunit)