Unitils单元测试示例

Unitils这个Java开源类包的目的是让单元测试变得更加容易和可维护。Unitils构建在DBUnitEasyMock项目之上并与 JUnitTestNG相结合。支持数据库测试,支持利用mock对象进行测试并提供与SpringHibernate相集成。Unitils设计成 以一种高度可配置和松散偶合的方式来添加这些服务到单元测试中。

对于想学习使用此测试框架的同学可参看以下的一些资料:

单元测试:Unitils的简单使用 http://www.open-open.com/lib/view/open1351682818848.html

Unitils 学习笔记 http://macrochen.iteye.com/blog/531445

单元测试系列之3:测试整合之王Unitils http://stamen.iteye.com/blog/1480316

单元测试系列之4:使用Unitils测试DAO http://stamen.iteye.com/blog/1484589

单元测试系列之5:使用unitils测试Service http://stamen.iteye.com/blog/1485837

这些资料都对Unitils的原理和使用方式都进行了详细的介绍,但对于象我这样第一次接触UnitilsDBUnitEasyMock这些东西的人显得有些复杂了。希望通过一个可运行的示例程序将这些内容串起来,好有一个直观的了解。

在网上搜索了一下,找到一个老外写的Unitils示例应用。模拟了一个人力资源应用程序,为某一职位的雇员设置基准工资。系统分为业务层和数据访问层,使用EbeanORM操作HsqlDB数据库。原文地址:http://www.devx.com/Java/Article/35129

将工程下来后发现运行不了,原来此工程是2007年写的使用的包的方法比较旧。只好自己动手改造一下。

DAO层

public List<Employee> findEmployeesByTitle(String title) throws DataAccessException {
		if (title == null)
			throw new IllegalArgumentException("Job title cannot be null.");

		List<Employee> result;
		try {
			result = Ebean.find(Employee.class).where().eq("title", title).findList();
		} catch (Throwable e) {
			throw new DataAccessException(e);
		}

		return result;
	}

unitils配置

unitils.modules=database,dbunit,easymock,inject

unitils.module.hibernate.enabled=false
unitils.module.spring.enabled=false

# these placeholders are set in avaje.properties
database.driverClassName=org.hsqldb.jdbcDriver
database.url=jdbc:hsqldb:mem:unitils-example
database.userName=sa
database.password=

database.schemaNames=PUBLIC
database.dialect=hsqldb

updateDataBaseSchema.enabled=true

# unitils will construct the test database using the ddl file found in this
# directory
dbMaintainer.autoCreateExecutedScriptsTable=true //自动创建脚本,否则报错
dbMaintainer.script.locations=src/main/resources //ddl文件路径与原来不同

dataSetStructureGenerator.xsd.dirName=src/test/resources/dataset-schema
sequenceUpdater.sequencevalue.lowestacceptable=100

整个工程很简单,有兴趣的同学可以通过这个地址 http://download.csdn.net/detail/peterwanghao/4937035下载。


在此过程中遇到了一些问题:

org.dbunit.dataset.NoSuchTableException 解决方法是SCHEMA的名字必须是大写。 http://linkyou.blog.51cto.com/1332494/283201

org.dbunit.dataset.NoSuchColumnException 解决方法是使用Unitils 3.3默认依赖的dbunit 2.2.2版本或者修改dbunit的DefaultMetadataHandler.java文件。http://zfanxu.iteye.com/blog/1508339


你可能感兴趣的:(Unitils单元测试示例)