当前位置: 首页 > 工具软件 > DbUnit > 使用案例 >

java annoataion_DBUnit

佘缪文
2023-12-01

1.添加dbunit-2.3.0.jar

DBUnit依赖于Simple Logging Facade for Java (SLF4J)项目

官网:http://www.slf4j.org/

2.添加slf4j-api-1.5.3.jar

3.添加slf4j-jcl-1.5.3.jar

SLF4J依赖于Apache的 Commons-Logging.

4.添加commons-logging.jar

★ 导出数据库中的数据到xml文件

------------------------------------------------------------------------------------------------------------

package com.test.dbunit;

import java.io.FileOutputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import org.dbunit.database.DatabaseConnection;

import org.dbunit.database.IDatabaseConnection;

import org.dbunit.database.QueryDataSet;

import org.dbunit.dataset.IDataSet;

import org.dbunit.dataset.xml.FlatDtdDataSet;

import org.dbunit.dataset.xml.FlatXmlDataSet;

public class Test {

public static void main(String[] args) throws Exception

{

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection(

"jdbc:mysql://localhost/dbunit","root","admin");

//使用DBunit的DatabaseConnection类封装jdbc的连接,它实现了接口IDatabaseConnection

IDatabaseConnection connection =new

DatabaseConnection(conn);

//QueryDataSet和.net中的数据集的概念类似,它是数据库的一个映像

QueryDataSet partial=new QueryDataSet(connection);

//把task表中的数据导出到xml文件中

partial.addTable("task");

//partial.addTable("users","select * from users where id= 1

");

partial.addTable("users");

//把数据内容导出到xml文件中

FlatXmlDataSet.write(partial,new

FileOutputStream("partial.xml"));

//将数据库中所有的数据导出

IDataSet full =connection.createDataSet();

FlatXmlDataSet.write(full, new

FileOutputStream("full.xml"));

//导出Dtd文件

FlatDtdDataSet.write(full, new

FileOutputStream("full.dtd"));

}

}

------------------------------------------------------------------------------------------------------------

encoding='UTF-8'?>

/p>

"full.dtd">

password="123"/>

password="456"/>

password="789"/>

------------------------------------------------------------------------------------------------------------

task*,

users*)>

id CDATA #IMPLIED

name CDATA #IMPLIED

description CDATA #IMPLIED

>

id CDATA #REQUIRED

username CDATA #REQUIRED

password CDATA #REQUIRED

>

------------------------------------------------------------------------------------------------------------------

//使用dbunti测试的简单例子

package com.test.dbunit;

import java.io.File;

import java.io.FileInputStream;

import org.dbunit.Assertion;

import org.dbunit.DBTestCase;

import org.dbunit.PropertiesBasedJdbcDatabaseTester;

import org.dbunit.dataset.IDataSet;

import org.dbunit.dataset.ITable;

import org.dbunit.dataset.SortedTable;

import org.dbunit.dataset.filter.DefaultColumnFilter;

import org.dbunit.dataset.xml.FlatXmlDataSet;

import org.dbunit.operation.DatabaseOperation;

public class SampleTest extends

DBTestCase{

//重写构造方法

public SampleTest(String name){

super(name);

//在系统属性中添加数据库练接用到的属性

System.setProperty(

PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS,

"com.mysql.jdbc.Driver");

System.setProperty(

PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL,

"jdbc:mysql://localhost/dbunit");

System.setProperty(

PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME,

"root");

System.setProperty(

PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD,

"admin");

}

public DatabaseOperation getSetUpOperation() throws

Exception{

//默认在setUPOperation中就是执行CLEAN_INSERT ,

//CLEAN_INSERT是DELETE_ALL和INSERT的组合,数据库会恢复到xml文件中的数据。

return DatabaseOperation.CLEAN_INSERT;

//刷新会更新xml内容到数据库中,数据存,xml中都存在的updata,数据库不存在insert,

//数据库中有xml中没有的保持不变

//return DatabaseOperation.REFRESH;

}

public DatabaseOperation getTearDownOperation() throws

Exception{

//什么都不做--默认

//return DatabaseOperation.NONE;

//清空数据库

return DatabaseOperation.DELETE_ALL;

}

@Override

protected IDataSet getDataSet() throws Exception

{

return new FlatXmlDataSet(new

FileInputStream("full.xml"));

}

public void test1() throws Exception{

IDataSet dataSet = getConnection().createDataSet();

//数据库中实际的表

ITable actualTable = dataSet.getTable("users");

//期望值

IDataSet dataSet2 = new FlatXmlDataSet(new

File("full.xml"));

ITable expectedTable = dataSet2.getTable("users");

//DBUnit的Assertion类

Assertion.assertEquals(expectedTable,actualTable);

}

//比较过滤二种方法之一,包含哪些列

public void test2() throws Exception{

IDataSet dataSet =

getConnection().createDataSet();

ITable actualTable =

dataSet.getTable("users");

//期望值-没有id列

IDataSet dataSet2 = new FlatXmlDataSet(new

File("Full2.xml"));

ITable expectedTable =

dataSet2.getTable("users");

//用过滤器过滤掉actualtable的中的id列

actualTable =

DefaultColumnFilter.includedColumnsTable(actualTable,

expectedTable.getTableMetaData().getColumns());

Assertion.assertEquals(expectedTable,

actualTable);

}

//方法2,比较用户名相同的。排除掉不需要比较的各个字段,

public void test3() throws Exception{

IDataSet dataSet =getConnection().createDataSet();

ITable actualTable = dataSet.getTable("users");

IDataSet dataSet2 = new FlatXmlDataSet(new

File("full2.xml"));

ITable expectedTable = dataSet2.getTable("users");

ITable filterActualTable

=DefaultColumnFilter.excludedColumnsTable(

actualTable, new

String[]{"id","password"});

ITable

filterExpectedTable

=DefaultColumnFilter.excludedColumnsTable(

expectedTable,new

String[]{"password"});

Assertion.assertEquals(filterExpectedTable,filterActualTable);

}

//排序表格

public void test4() throws Exception{

IDataSet dataSet = getConnection().createDataSet();

//数据库中实际的表

ITable actualTable = dataSet.getTable("users");

//期望值

IDataSet dataSet2 = new FlatXmlDataSet(new

File("expected.xml"));

ITable expectedTable = dataSet2.getTable("users");

//把表按照字段排序,默认是按照字符串排序

SortedTable sortedTable1 = new SortedTable(actualTable,new

String[]{"id"});

//按照数据库中字段排序

sortedTable1.setUseComparable(true);

SortedTable sortedTable2 = new SortedTable(expectedTable,new

String[]{"id"});

//按照数据库中字段排序

sortedTable2.setUseComparable(true);

//DBUnit的Assertion类

Assertion.assertEquals(sortedTable2,sortedTable1);

}

// 表操作测试的实例:

public void testSave() throws Exception{

UsersDB db =new UsersDB();

Users users =new Users();

users.setId(9);

users.setUserName("langsin");

users.setPassword("helloworld");

db.save(users);

IDataSet dataSet = getConnection().createDataSet();

ITable actualTable = dataSet.getTable("users");

IDataSet dataSet2 = new FlatXmlDataSet(new

File("expected2.xml"));

ITable expectedTable =dataSet.getTable("users");

Assertion.assertEquals(expectedTable, actualTable);

}

------------------------------------------------------------------------

package com.test.bean;

public class Users {

private int id;

private String userName;

private String password;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

------------------------------------------------------------------------

package com.test.dbunit;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import com.test.bean.Users;

public class UsersDB {

public void save(Users users){

Connection conn=null;

try{

Class.forName("com.mysql.jdbc.Driver");

conn=DriverManager.getConnection("jdbc:mysql://localhost/dbunit",

"root", "admin");

String sql="insert into users(id,username,password)

values(?,?,?)";

PreparedStatement ps

=conn.prepareStatement(sql);

ps.setInt(1, users.getId());

ps.setString(2,users.getUserName());

ps.setString(3,users.getPassword());

ps.executeUpdate();

}catch(Exception

ex){

ex.printStackTrace();

}finally

{

if(null!= conn)

{

try

{

conn.close();

}catch(SQLException

e){

e.printStackTrace();

}

}

}

}

}

---------------------------expected2.xml------------------------------

encoding='UTF-8'?>

/p>

"full.dtd">

password="123"/>

password="456"/>

password="789"/>

password="helloworld"/>

***********************************************************************

使用DBUnit进行单元测试的基本流程

1.根据业务,做好测试用的准备数据和预想结果数据,通常为XML格式文件。

2.在setUp()方法里面边备份数据库中的关联表。

3.在setUP()方法里面边读入准备数据。

4.对测试类的对应测试方法进行调用:执行对象方法,把数据库中的实际执行

结果和预想结果进行比较。

5.在tearDown()方法里面,把数据库还原到测试前状态。

***********************************************************************

 类似资料:

相关阅读

相关文章

相关问答