Unitils这个 Java 开源类包的目的是让单元测试变得更加容易和可维护。 Unitils 构建在 DBUnit 与 EasyMock 项目之上并与 JUnit 和 TestNG 相结合。支持数据库测试,支持利用 mock 对象进行测试并提供与 Spring 和 Hibernate 相集成。 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 的原理和使用方式都进行了详细的介绍,但对于象我这样第一次接触 Unitils , DBUnit , EasyMock 这些东西的人显得有些复杂了。希望通过一个可运行的示例程序将这些内容串起来,好有一个直观的了解。
在网上搜索了一下,找到一个老外写的Unitils 示例应用。模拟了一个人力资源应用程序,为某一职位的雇员设置基准工资。系统分为业务层和数据访问层,使用 Ebean 做 ORM 操作 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.youkuaiyun.com/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的实战示例,通过一个模拟的人力资源应用程序来演示如何使用Unitils进行单元测试。该示例包括业务层和服务层的测试,并详细介绍了如何配置Unitils以及在测试过程中可能遇到的问题及解决方案。
1410

被折叠的 条评论
为什么被折叠?



