加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

unit-testing – 在Grails GORM域类上覆盖事件闭包以进行单元测

发布时间:2020-12-14 16:22:48 所属栏目:大数据 来源:网络整理
导读:我正在开发一个新的Grails项目,最近注意到 Spring Security Core生成的User类中的默认约定现在通过beforeInsert / Update事件自动编码密码.这是一种很好,干净,干燥的编码方式,也让人无法忘记这样做. 但是,现在在尝试编写一些使用所述User类的单元测试时,我发
我正在开发一个新的Grails项目,最近注意到 Spring Security Core生成的User类中的默认约定现在通过beforeInsert / Update事件自动编码密码.这是一种很好,干净,干燥的编码方式,也让人无法忘记这样做.

但是,现在在尝试编写一些使用所述User类的单元测试时,我发现我要么必须模拟springSecurityService(由于编码),或者更优选(并且干净利落),我只是覆盖了beforeInsert / Update闭包,什么都不做.通常在Groovy中,可以使用ExpandoMetaClass重写方法,ala …

User.metaClass.beforeInsert = { /* do nothing */ }

…但我发现创建和保存新用户时会继续调用原始的beforeInsert.这反过来导致我的单元测试爆炸.对我来说,解决这个问题并模拟服务是微不足道的,但上述应该可行.我错过了什么吗?与GORM的事件关闭有什么不同,我没有接受?

解决方法

为了提高性能,Grails直接使用caches方法句柄来调用事件而不是Groovy的元层.原因是,如果你要保存数百个域实例,那么如果Grails必须为每个事件通过Groovy的元层,那么它会严重损害性能.

有很多方法可以解决这个问题,例如定义自己的User类,根据测试设置的系统/环境属性禁用事件,但目前无法通过元编程覆盖方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读