Unitils单元测试示例

本文介绍了一个基于Unitils的实战示例,通过一个模拟的人力资源应用程序来演示如何使用Unitils进行单元测试。该示例包括业务层和服务层的测试,并详细介绍了如何配置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层

 

[java] view plain copy
  1. public  List<Employee> findEmployeesByTitle(String title)  throws  DataAccessException {  
  2.         if  (title ==  null )  
  3.             throw   new  IllegalArgumentException( "Job title cannot be null." );  
  4.   
  5.         List<Employee> result;  
  6.         try  {  
  7.             result = Ebean.find(Employee.class ).where().eq( "title" , title).findList();  
  8.         } catch  (Throwable e) {  
  9.             throw   new  DataAccessException(e);  
  10.         }  
  11.   
  12.         return  result;  
  13.     }  


unitils配置

 

[plain] view plain copy
  1. unitils.modules=database,dbunit,easymock,inject  
  2.   
  3. unitils.module.hibernate.enabled=false  
  4. unitils.module.spring.enabled=false  
  5.   
  6. # these placeholders are set in avaje.properties  
  7. database.driverClassName=org.hsqldb.jdbcDriver  
  8. database.url=jdbc:hsqldb:mem:unitils-example  
  9. database.userName=sa  
  10. database.password=  
  11.   
  12. database.schemaNames=PUBLIC  
  13. database.dialect=hsqldb  
  14.   
  15. updateDataBaseSchema.enabled=true  
  16.   
  17. # unitils will construct the test database using the ddl file found in this  
  18. # directory  
  19. dbMaintainer.autoCreateExecutedScriptsTable=true //自动创建脚本,否则报错  
  20. dbMaintainer.script.locations=src/main/resources //ddl文件路径与原来不同  
  21.   
  22. dataSetStructureGenerator.xsd.dirName=src/test/resources/dataset-schema  
  23. 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值