2007-06-14

dbunit使用

使用dbunit,可以帮助我们在测试中维护数据,也可以辅助我们的测试。

首先当然是下载dbunit, http://dbunit.sourceforge.net

我测试用的是 MYSQL 5.0 。

建立数据库:
create table test1(
id int not null auto_increment,
user_name varchar(50),
primary key(id)) engine=innodb;


保存数据的xml文件:
<dataset>
    <test1 user_name="tom"/>             
    <test1 user_name="John"/>
    <test1 user_name="Rose"/>  
</dataset>



首先建立一个 JunitTest 的类:


public class Test2 extends TestCase {

	protected void setUp() throws Exception {

         }

	protected void tearDown() throws Exception {

         }
  
}


我不喜欢继承dbunit的类,所以我们在JunitTest 的类里增加这个变量:

public class Test2 extends TestCase {

	private IDatabaseTester databaseTester;

	protected void setUp() throws Exception {

         }

	protected void tearDown() throws Exception {

         }
  
}


然后,我们可以该写 setUp() 方法了,无非就是连接数据库,把数据倒入到表里。


	protected void setUp() throws Exception {
		
		databaseTester = new JdbcDatabaseTester("com.mysql.jdbc.Driver",
	            "jdbc:mysql://127.0.0.1:3306/test", "root", "123");
		
		IDataSet dataSet = getDataSet();
		
		databaseTester.setDataSet( dataSet );
		databaseTester.onSetup();


	}

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



然后是 tearDown 方法
	protected void tearDown() throws Exception
    {

		databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
        databaseTester.onTearDown();
    }


好了,准备工作完成了,下面开始写测试方法。

	public void test1() throws Exception{
		
		ITable test1Table = databaseTester.getDataSet().getTable("test1");
		assertEquals(test1Table.getRowCount(), 3);
		
	}

这个方法就是测试 test1 表有多少条记录

	public void test2() throws Exception{
		
		ITable test1Table = databaseTester.getConnection().createQueryTable("any_name",
				"select user_name from test1 where user_name='tom'");
		
		assertTrue(test1Table.getRowCount()==1);
		
	}

这个方法测试是否有 user_name='tom' 这个记录.


那么自动增加字段怎么办呢?
只要在 tearDown 里增加
databaseTester.setTearDownOperation(DatabaseOperation.TRUNCATE_TABLE);

就可以了!
评论
yananay 2008-01-30
已经很详细了阿。。。
zhengbin917943 2008-01-17
大哥能不能详细点~~~
发表评论

您还没有登录,请登录后发表评论

yananay
搜索本博客
我的相册
D35bafa8-5bf0-475f-aa06-16f3080557a1-thumb
tdd
共 3 张
存档
最新评论