1、导入MAVEN依赖、
<dependency>
<groupId>org.unitils</groupId><artifactId>unitils-dbunit</artifactId>
<version>3.4.2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.unitils</groupId>
<artifactId>unitils-database</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.unitils</groupId>
<artifactId>unitils-database</artifactId>
<version>3.4.2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.unitils</groupId>
<artifactId>unitils-dbmaintainer</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.unitils</groupId>
<artifactId>unitils-dbmaintainer</artifactId>
<version>3.4.2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
</exclusion>
</exclusions>
</dependency>
本来是只需要引入
<dependency>
<groupId>org.unitils</groupId><artifactId>unitils-dbunit</artifactId>
<version>3.4.2</version>
<scope>test</scope>
</dependency>
但是由于所依赖的slf4j-nop的log实现方式与项目中的实现冲突,以排除冲突,解决日志不能打印的问题。
2、编写dataset获取方式,以及测试前测试后的处理方式
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.dbunit.DatabaseTestCase;
import org.dbunit.IDatabaseTester;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.operation.DatabaseOperation;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author panguangjun
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:META-INF/spring/applicationContext-test.xml" })
public abstract class BaseDBTestUtil extends DatabaseTestCase {
@Resource
private DataSource sequenceDataSource;
// static{
// JoranConfigurator configurator = new JoranConfigurator();
// LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
// configurator.setContext(lc);
// lc.reset();
// try {
// configurator.doConfigure("src/test/resources/logback.xml");
// } catch (JoranException e) {
// e.printStackTrace();
// }
// StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
// System.out.println("===================");
// }
//
@Before
public void start() throws Exception {
this.setUp();
}
@After
public void done() throws Exception {
super.tearDown(); // 这里不再调用基类的tearDown
}
/* (non-Javadoc)
* @see org.dbunit.DatabaseTestCase#getSetUpOperation()
*/
@Override
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.INSERT;
}
@Override
protected DatabaseOperation getTearDownOperation() {
return DatabaseOperation.DELETE;
}
protected IDatabaseConnection getConnection() throws Exception {
return new DatabaseConnection(getJdbcConnection());
}
protected IDatabaseTester getDatabaseTester() throws Exception {
return newDatabaseTester();
}
private Connection getJdbcConnection() throws Exception {
Connection conn = sequenceDataSource.getConnection();
return conn;
}
/*/credithouse-domainservice-main/src/test/resources/META-INF/spring/test.properties
* (non-Javadoc)
*
* @see org.dbunit.DatabaseTestCase#getDataSet()
*/
@Override
protected IDataSet getDataSet() throws Exception {
File file = new File(this.getXmlPath());
return new FlatXmlDataSetBuilder()
.setColumnSensing(true)
.build(new FileInputStream(file));
}
protected abstract String getXmlPath();
}
提供了获取xml的抽象方法,在进行单元测试时,继承该类,并实现getXmlPath方法即可初始化数据。
3、在xml文件实例
<?xml version='1.0' encoding="utf-8"?>
<dataset>
<ts_sc_model ID="1" name=" aaaaaaaaa" status="VALIDE"
suit_object="aaaaaaaaaaaa" report_type="QUARTERLY_REPOART"
description="aaaaaaaaaaaa" gmt_created="2015-12-14 16:14:44"
gmt_modified="2015-12-15 17:14:17" />
<ts_sc_model ID="2" name=" aaaaaaaaa" status="APPROVE"
suit_object="aaaaaaaaaaaa" report_type="QUARTERLY_REPOART"
description="aaaaaaaaaaaa" gmt_created="2015-12-14 16:14:44"
gmt_modified="2015-12-15 17:14:17" />
<ts_sc_condition ID="1" ACESS_ITEM_ID="1"
ACCESS_MODEL_ID="1" CONDITION_NAME="条件1" gmt_created="2015-12-14 16:14:44"
CONDITION_CONTENT='{"accessItemID":"1" "accessModelID":"1" "conditionDesc":"描述1" "conditionName":"条件1" "score":100}'
TYPE="QUALITATIVE_ACCESS" />
<ts_sc_condition ID="2" ACESS_ITEM_ID="2"
ACCESS_MODEL_ID="2" CONDITION_NAME="条件2" gmt_created="2015-12-14 16:14:44"
CONDITION_CONTENT='{"accessItemID":"2" "accessModelID":"2" "minValue":1 "maxValue":100 "conditionName":"条件2" "score":100}'
TYPE="QUANTITY_ACCESS" />
</dataset>
注意:在使用时同一个表明,同一个字段的大小写必须一致,不然第一个种写法的字段有值,后面同字段的没值(主要因为大小写的问题)
即同一个表明同一个字段的大小写必须一致