我正在研究一个新鲜的Grails项目,并且最近注意到Spring Security Core生成的User类中的默认约定现在通过beforeInsert/Update事件自动编码密码。这是一种干净,干净的编码方式,也使得忘记这么做成为不可能。但是,现在当试图写一些使用所述User类的单元测试时,我发现我必须模拟springSecurityService(由于编码),或者更优选地(并且干净地),我' d只需重写beforeInsert/Update闭包,其中一个不执行任何操作。通常在Groovy一个可以覆盖使用ExpandoMetaClass,鼻翼的方法...Grails GORM领域类的单元测试重写事件关闭
User.metaClass.beforeInsert = { /* do nothing */ }
...但我发现,原来beforeInsert继续在创建并保存新的用户调用。这反过来导致我的单元测试爆炸。对我来说,解决这个问题并嘲笑服务是微不足道的,但上面的应该工作。我错过了什么吗? GORM的事件关闭有什么不同,我没有采取?
另外一点需要注意的,我有一个@Mock([用户])在我的测试注解。这可能与奇怪的行为有关,但仅仅是一种预感。 – James
是实例上的expando方法吗? //问它永远不会太晚:) –
你为什么这么想,那嘲笑springSecurityService并不是这样做的首选方式?我的意思是,在思考依赖注入时,首先考虑的事情之一就是:外部化依赖管理,因此能够为测试目的创建存根/模拟。在我看来,改变用户的metaClass在任何方面都不是很清楚。 –