我正在开发一个新的 Grails 项目,最近注意到 Spring Security Core 生成的 User 类中的默认约定现在通过 beforeInsert/Update 事件自动编码密码。这是一种很好的、干净的、干燥的编码方式,也让人不可能忘记这样做。
但是,现在当尝试编写一些使用所述 User 类的单元测试时,我发现我要么必须模拟 springSecurityService (由于编码),或者更优选地(并且干净地),我只是覆盖beforeInsert/Update 闭包,其中一个什么都不做。通常在 Groovy 中,可以使用 ExpandoMetaClass 覆盖方法,阿拉...
User.metaClass.beforeInsert = { /* do nothing */ }
...但我发现在创建和保存新用户时继续调用原始的 beforeInsert。这反过来又导致我的单元测试崩溃。解决这个问题并模拟服务对我来说是微不足道的,但上面应该可以工作。我错过了什么吗?GORM 的事件关闭有什么不同我没有接受的吗?