涉及数据库操作的单元测试,最麻烦的就是基础数据准备、正确的验证数据。这两项工作以前我都是手工完成,存储过程、SQL搞得挺乱,最近试了试DBUNIT还是不错,为准备数据提供了一种思路。
测试类的基类如下:
public class TestBase extends DBTestCase
{
private static String[] paths ={"conf/spring-context.xml"};
private static ApplicationContext ctx = null;
private static final String DEFAULT_LOG4J_XML_CONFIG_FILE =
"conf/log4j.properties";
protected Logger log = Logger.getLogger(getClass());
private String name;
private static IDataSet databaseDataSet;
static {
PropertyConfigurator.configure(DEFAULT_LOG4J_XML_CONFIG_FILE);
ctx = new FileSystemXmlApplicationContext(paths);
}
public TestBase(){}
public void init(boolean isInit){
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:oracle:thin:@localhost:1521:orcl" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "oracle.jdbc.driver.OracleDriver" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "SSS" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "SSS" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "APP" );
}
public Object getBean(String beanName){
return ctx.getBean(beanName);
}
/**
* 初始化数据库连接
* @throws SQLException
* @throws Exception
*/
protected void initConn(){
try {
databaseDataSet = getConnection().createDataSet();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 业务方法执行后,取数据库中的记录
* @param tableName
* @return
* @throws DataSetException
*/
protected static ITable getDbTable(String tableName) throws DataSetException{
return databaseDataSet.getTable(tableName);
}
/**
* 从XML文件中取预先准备的正确数据,用于验证db数据。
* @param tableName
* @return
* @throws DataSetException
* @throws Exception
*/
protected ITable getXmlTable(String tableName) throws DataSetException, Exception{
return new XmlDataSet(new FileInputStream("validatedata/"+tableName+".xml")).getTable(tableName);
}
protected DatabaseOperation getSetUpOperation() throws Exception
{
return DatabaseOperation.NONE;
}
protected DatabaseOperation getTearDownOperation() throws Exception
{
return DatabaseOperation.DELETE_ALL;
}
具体一个测试类:
public class LogFtpletTest extends TestBase {
LogFtplet log = new LogFtplet();
public void setUp() {
super.initConn();
}
public void testOnFend() throws DataSetException,
DatabaseUnitException, Exception {
log.onAppendStart(session, request);//业务方法
ITable expectedTable = getXmlTable("T_RECEIVE_STATUS");//事先准备的XML正确数据
ITable actualTable = getDbTable("T_RECEIVE_STATUS");//业务方法执行完后,数据库表数据
Assertion.assertEqualsIgnoreCols(expectedTable,
actualTable,
new String[] {"S_ID", "START_TIME",
"UPDATE_TIME"}); //比较需要的列值
assertEquals(new BigDecimal(2), actualTable.getValue(0, "STATUS"));//比较需要的列值
}
}
分享到:
相关推荐
Junit,dbunit单元测试jar包
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
单元测试入门学习,和dbunit结合开发
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
junit单元测试junit单元测试junit单元测试
单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。
在Eclipse中使用JUnit4进行单元测试!
junit3 junit4 api,单元测试的利器
在Eclipse中使用JUnit4进行单元测试 在Eclipse中使用JUnit4进行单元测试
用Junit进行单元测试
Java语言是一个支持面向对象的语言,通常情况下我们可以将程序的一个单元看成是一个独立的类,因此进行单元测试的重点就是对这些类进行测试。 1、不需要测试get和set这样的行为 2、一个方法至少需要测试一次
几乎包含了所有junit所要用到的扩展包
dbunit-2.4.9 hamcrest-core-1.3 hamcrest-library-1.3 junit-4.12 slf4j-api-1.6.1 slf4j-log4j12-1.6.1 log4j-1.2.15
JDBC实现CRUD并用Junit进行单元测试
改代码是我的我的一个项目自己写完后自测所以就写了这个junit的单元测试类,以及可能会遇到的一些问题,以及其中的一些经验,项目用的是spring + mybatis。我写的这个测试类基本概括了单元测试的基本用法,只要按照...
包含junit-4.11.jar, dbunit-2.4.9.jar, unitils-3.3-with-dependencies.zip, mockito-1.9.5.zip
用Junit进行单元测试
使用JUnit进行单元测试PPT Spring 基于Aspectj 进行AOP编程的知识。 Aspectj快速参考文档
Unit是一个Java语言的单元...Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
junit单元测试用到的jar包,有需要的可以下载下