大概流程:
1.用dbunit创建初始的测试数据。
2.用spring-mock 维护测试过程中的数据会滚,这样可以保证测试后数据库保持原状态。
3.用junit架构测试。
4.用dbunit销毁初始测试数据。
Java代码
packagecom.test.dbunit.dao;
importjavax.sql.DataSource;
importorg.dbunit.Assertion;
importorg.dbunit.database.DatabaseConnection;
importorg.dbunit.database.IDatabaseConnection;
importorg.dbunit.database.QueryDataSet;
importorg.dbunit.dataset.IDataSet;
importorg.dbunit.dataset.xml.FlatXmlDataSet;
importorg.dbunit.operation.DatabaseOperation;
importorg.junit.Assert;
importorg.junit.Before;
importorg.junit.Test;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.core.io.ClassPathResource;
importorg.springframework.jdbc.datasource.DataSourceUtils;
importorg.springframework.test.context.ContextConfiguration;
importorg.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
importorg.springframework.test.context.transaction.TransactionConfiguration;
importcom.test.dbunit.entity.User;
@ContextConfiguration(locations = {"classpath:testApplicationContext.xml"})
@TransactionConfiguration(defaultRollback =true)
publicclassUserDaoTestextendsAbstractTransactionalJUnit4SpringContextTests {
@Autowired
privateUserDao userDao;
@Autowired
privateDataSource dataSource;
privateIDatabaseConnection conn;
@Before
publicvoidinitDbunit()throwsException {
conn =newDatabaseConnection(DataSourceUtils.getConnection(dataSource));
}
@Test
publicvoidsaveUser()throwsException {
User user =newUser();
user.setNick("user001");
user.setPassword("password001");
userDao.save(user);
QueryDataSet actual =newQueryDataSet(conn);
actual.addTable("user",
"select * from user where user.nick = 'user001'");
IDataSet expected =newFlatXmlDataSet(newClassPathResource(
"com/taobao/dbunit/dao/user001.xml").getFile());
Assertion.assertEquals(expected, actual);
}
@Test
publicvoidupdateUser()throwsException {
IDataSet origen =newFlatXmlDataSet(newClassPathResource(
"com/taobao/dbunit/dao/user001.xml").getFile());
DatabaseOperation.INSERT.execute(conn, origen);
User user =newUser();
user.setNick("user001");
user.setPassword("password002");
userDao.update(user);
QueryDataSet actual =newQueryDataSet(conn);
actual.addTable("user",
"select * from user where user.nick = 'user001'");
IDataSet expected =newFlatXmlDataSet(newClassPathResource(
"com/taobao/dbunit/dao/user001_updated.xml").getFile());
Assertion.assertEquals(expected, actual);
}
@Test
publicvoidremoveUser()throwsException {
IDataSet origen =newFlatXmlDataSet(newClassPathResource(
"com/taobao/dbunit/dao/user001.xml").getFile());
DatabaseOperation.INSERT.execute(conn, origen);
userDao.remove("user001");
QueryDataSet actual =newQueryDataSet(conn);
actual.addTable("user","select * from user where nick = 'user001'");
Assert.assertEquals(0, actual.getTable("user").getRowCount());
}
@Test
publicvoidfindUser()throwsException {
IDataSet data =newFlatXmlDataSet(newClassPathResource(
"com/taobao/dbunit/dao/user001.xml").getFile());
DatabaseOperation.INSERT.execute(conn, data);
User user = userDao.getUserByNick("user001");
Assert.assertEquals("password001", user.getPassword());
}
}
package com.test.dbunit.dao;
import javax.sql.DataSource;
import org.dbunit.Assertion;
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.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
import org.junit.Assert;
import org.junit.Before;
im