使用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);
就可以了!