Unitils单元测试示例

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层

 

[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.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)