dbunit study note

本文介绍使用DbUnit和JUnit进行数据库测试的方法,包括数据库环境准备、数据集操作及单元测试实现。通过示例展示了如何获取数据库内容、特定表数据及其依赖数据,并介绍了测试数据文件的准备与DBTestCase的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.准备环境

dbunit的jar包,2.3.0

配置数据库:这里用mysql5.0

 

2.一些方法

获取所有数据库中内容

Class driverClass = Class.forName("com.mysql.jdbc.Driver");
Connection jdbcConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK","root", "111111");
IDatabaseConnection databaseConnection = new DatabaseConnection(
				jdbcConnection);
IDataSet dataSet = databaseConnection.createDataSet();
FlatXmlDataSet.write(dataSet, new FileOutputStream("c:/test.xml"));

 获取特定表的数据

Class driverClass = Class.forName("com.mysql.jdbc.Driver");
		Connection jdbcConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK","root", "111111");
IDatabaseConnection databaseConnection = new DatabaseConnection(
				jdbcConnection);
		QueryDataSet queryDataSet = new QueryDataSet(databaseConnection);
		queryDataSet.addTable("Product", "select p.id from Product p");
		queryDataSet.addTable("demo");
		FlatXmlDataSet.write(queryDataSet, new FileOutputStream("c:/test.xml"));

 

获取特定表以及其他依赖本表的数据

		Class driverClass = Class.forName("com.mysql.jdbc.Driver");
		Connection jdbcConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK","root", "111111");
IDatabaseConnection databaseConnection = new DatabaseConnection(jdbcConnection);
		String[] depTableNames = TablesDependencyHelper.getAllDependentTables(
				databaseConnection, "Product");
		IDataSet depDataset = databaseConnection.createDataSet(depTableNames);
		FlatXmlDataSet
				.write(depDataset, new FileOutputStream("c:/demo.xml"));

 生成DTD文件

Class driverClass = Class.forName("com.mysql.jdbc.Driver");
		Connection jdbcConnection = DriverManager
				.getConnection(
						"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK",
						"root", "111111");
IDatabaseConnection databaseConnection = new DatabaseConnection(
				jdbcConnection);
		FlatDtdDataSet.write(databaseConnection.createDataSet(),
				new FileOutputStream("c:/test.dtd"));

 

 

和单元测试相关的:

 1.准备测试数据文件

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <demo ID="1" name="one" unitPrice="12.0"/>
</dataset>

 

2.继承DBTestCase来实现测试代码,DBTestCase的底层是继承了Junit的TestCase。DBTestCase依赖IDatabaseTester。

public class SampleTest extends DBTestCase
{
    public SampleTest(String name)
    {
        super( name );
        System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "org.hsqldb.jdbcDriver" );
        System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:hsqldb:sample" );
        System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "sa" );
        System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "" );
	// System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "" );
    }

    protected IDataSet getDataSet() throws Exception
    {
        return new FlatXmlDataSet(new FileInputStream("dataset.xml"));
    }
}

 

3.默认情况下,是clean insert,如果要覆盖,则覆盖getSetUpOperation() 和 getTearDownOperation() 方法。

public class SampleTest extends DBTestCase
{
    ...
    protected DatabaseOperation getSetUpOperation() throws Exception
    {
        return DatabaseOperation.REFRESH;
    }

    protected DatabaseOperation getTearDownOperation() throws Exception
    {
        return DatabaseOperation.NONE;
    }
    ...
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值