提升 Grails HibernateSpec 单元测试的一个技巧

14 篇文章 0 订阅

起因

Grails 的 HibernateSpec 单元测试技术可以让我们对 service 做很好的单元测试,而且是读写test数据库的方式进行真实的数据库测试。
但因为是读写真实的test数据库,所以当 Domain class (表)多了以后,启动一次单元测试要花1、2分钟,对于需要快速得到结果是非常不友好的。

原因

之所以 HibernateSpec 的启动这么慢是因为作者 Graeme Rocher 是这样设计测试流程的。
1、用 create-drop 方式创建 hiberante data source,于是在启动时会创建表,在停止时会删除表
2、执行测试方法
3、删除所有的表

慢的原因又具体是在创建表结构时,会一条条地创建“外键约束”,非常的慢。

解决方案

通过查看 HiberanteSpec 代码,发现只要改写方法 getConfiguration() 提供我们需要的数据库创建方法就可以了。

在测试类中,重载 getConfiguration() 方法,返回 “update” 类型,而非 “create-drop” 类型,这样就可以避免反复创建表,从而节约时间。

    @Override
    Map getConfiguration() {
        return Collections.singletonMap(Settings.SETTING_DB_CREATE, "update")
    }

注意事项

这样改完,需要注意测试方法结束后数据不会被删除,因此这样使用的测试用例要能避免旧数据的干扰,要能重复执行且能通过才行,否则会失去“单元测试”的意义。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值