我正在处理一个全新的Grails项目,并注意到Spring Security Core生成的User类中默认约定现在通过beforeInsert/Update事件自动对密码进行编码。这是一种漂亮、干净、DRY的编码方式,也使得忘记编码成为不可能。
然而,在试图编写一些利用该User类的单元测试时,我发现我要么必须模拟springSecurityService(因为编码),要么更好地(并且更清楚地)用一个什么都不做的beforeInsert/Update闭包覆盖它。在Groovy中,通常可以使用ExpandoMetaClass覆盖方法,如下:...
然而,在试图编写一些利用该User类的单元测试时,我发现我要么必须模拟springSecurityService(因为编码),要么更好地(并且更清楚地)用一个什么都不做的beforeInsert/Update闭包覆盖它。在Groovy中,通常可以使用ExpandoMetaClass覆盖方法,如下:...
User.metaClass.beforeInsert = { /* do nothing */ }
...但我发现在创建和保存新用户时,原始的beforeInsert继续被调用。这反过来导致我的单元测试失败。对于我来说,只需要简单地解决这个问题并模拟服务即可,但上述应该可以正常工作。我有什么遗漏吗?GORM的事件闭包是否有所不同,我没有注意到?