使用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文件:
xml 代码
- <dataset>
- <test1 user_name="tom"/>
- <test1 user_name="John"/>
- <test1 user_name="Rose"/>
- </dataset>
首先建立一个 JunitTest 的类:
java 代码
- public class Test2 extends TestCase {
-
- protected void setUp() throws Exception {
-
- }
-
- protected void tearDown() throws Exception {
-
- }
-
- }
我不喜欢继承dbunit的类,所以我们在JunitTest 的类里增加这个变量:
java 代码
- public class Test2 extends TestCase {
-
- private IDatabaseTester databaseTester;
-
- protected void setUp() throws Exception {
-
- }
-
- protected void tearDown() throws Exception {
-
- }
-
- }
然后,我们可以该写 setUp() 方法了,无非就是连接数据库,把数据倒入到表里。
java 代码
- 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 方法
java 代码
- protected void tearDown() throws Exception
- {
-
- databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
- databaseTester.onTearDown();
- }
好了,准备工作完成了,下面开始写测试方法。
java 代码
- public void test1() throws Exception{
-
- ITable test1Table = databaseTester.getDataSet().getTable("test1");
- assertEquals(test1Table.getRowCount(), 3);
-
- }
这个方法就是测试 test1 表有多少条记录
java 代码
- 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 里增加
java 代码
- databaseTester.setTearDownOperation(DatabaseOperation.TRUNCATE_TABLE);
就可以了! |