DBUnit使用心得

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>

注意:在使用时同一个表明,同一个字段的大小写必须一致,不然第一个种写法的字段有值,后面同字段的没值(主要因为大小写的问题)

即同一个表明同一个字段的大小写必须一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值