单元测试中使用Unitls
以前做单元测试,使用DBUnit,但DBUnit没有针对单元测试做太多的东西,虽然灵活,但使用起来不方便,而且也没有想Rails里面那样为怎样在单元测试中准备测试数据提供一个比较好的规范和约束。使用中还得自己参照Rails写了很多代码进行封装。最近发现一个开源的框架Unitils,一个对JUnit的扩展框架,其中就包含了对DBUnit的封装。
试用了一下Unitls,里面功能不少。时间关系,还只是主要用了一下我们用得到的一些特性。
以前我们写单元测试代码,除了JUnit,另外还有用EasyMock、DBUnit、另外还有Spring、Hibernate等等,用起来很不方便。有了Unitls后,感觉写测试代码方便很多(有点写Rails测试代码的感觉了,虽然还是有差距,呵呵)。
Unitls除了对JUnit的Assert加强外,主要包含以下Modules:
•DatabaseModule:unit-testdatabasemaintenanceandconnectionpooling
•DbUnitModule:testdatamanagementusingDbUnit
•HibernateModule:Hibernateconfigurationsupportandautomaticdatabasemappingchecking
•EasyMockModule:supportforcreatingmocksandlenientreflectionargumentmatching
•InjectModule:supportforinjecting(mock)objectsintootherobjects
•SpringModule:supportforloadingapplicationcontextsandretrievingandinjectingSpringbeans
个人感觉比较有用的Module是:DbUnitModule、EsayMockModule、InjectModule、SpringModule。
DbUnitModule对DBUnit进行了封装,由于Unitils大量使用了Annotation,和JUnit4的风格差不多,使用起来很方便。但它的用法是为每个测试类或者测试方法准备一个DataSet文件,好像还不支持在一个测试方法前执行多个DataSet,开始不太习惯,但用惯了感觉也还不错。
SpringModule可以方便的在测试代码中获取定义在Spring中的Bean,一起也是自己写了一个JUnit的TestCase的基类来初始化,现在可以直接用这个了。
EasyMockModule和InjectModule,写测试代码,一直一来比较烦人的就是写MockObject,本来我就在用EasyMock,有了这两个东东,以后写测试代码会稍微轻松写,至少可以少写几行了,。
DatabaseModule感觉基本参照Rails框架做的,可以很方便的维护数据库结构的变动,也许下次新项目可以用这个来维护数据库脚本,但原有的项目由于自己已经有一套数据库脚本管理的流程,感觉就没必要改了。
HibernateModule如果单独用hibernate的话应该很好用,在通过Spring来用Hibernate的情况下,应该不需要单独用。但还没有看太仔细,里面有些功能也许用的到。
另外,Untils是一个可扩展性非常好的框架,其Module是可以自己扩展的,以后想自己开发一些工具类扩展测试功能的话,都可以基于这个框架做。