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类,根据测试设置的系统/环境属性禁用事件,但目前无法通过元编程覆盖方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |