私は新しい Grails プロジェクトに取り組んでおり、最近、Spring Security Core で生成された User クラスのデフォルト規則が beforeInsert/Update イベントを介してパスワードを自動エンコードすることに気付きました。これは、エンコードを行うための優れたクリーンな DRY 方法であり、そうすることを忘れることもありません。
ただし、上記の User クラスを使用するいくつかの単体テストを作成しようとすると、(エンコードのために) springSecurityService をモック アウトするか、より好ましくは (そしてきれいに) オーバーライドする必要があることがわかります。何もしない beforeInsert/Update クロージャー。通常、Groovy では、ExpandoMetaClass を使用してメソッドをオーバーライドできます。
User.metaClass.beforeInsert = { /* do nothing */ }
...しかし、新しいユーザーを作成して保存すると、元の beforeInsert が引き続き呼び出されることがわかりました。これにより、単体テストが爆発します。これを回避してサービスをモックアウトするのは簡単ですが、上記は機能するはずです。何か不足していますか?私が取り上げていないGORMのイベント閉鎖と何か違うことはありますか?