0

GrailsドメインクラスにspringSecurityServiceを挿入する方法コントローラーの単体テスト中、以下はサンプルコードですが、nullオブジェクトでencodePasswordを取得できないというエラーが発生し続け、同様にgetPrincipal();についても同様です。

 //Controller class
    class UserController{
     def save(){
         def user=new AppUser(params).save();
         render(user as JSON)  
      }
    }

    //Domain Class
    class User{
     transient springSecurityService
    String name
    String address
    String password
    String createdBy
    def beforeInsert(){
      password=springSecurityService.encodePassword(password);
      def principal = springSecurityService.getPrincipal() 
    }

//Controller Test
@TestMixin(GrailsUnitTestMixin)
@TestFor(UserController)
class UserControllerSpec {

   void setUp() {
   }
    void "test save"(){
     given:
     params.name="A"
     params.password="abc"
     params.address="XYZ" 
     when:
     controller.save();
     then:
     response.status=="200" 
    }

}
4

1 に答える 1

0

Grails 2.x は、'defineBeans' クロージャーを使用したテスト環境用の Spring Bean の定義をサポートしています。コントローラーなどで依存性注入をサポートしていますが、ドメイン オブジェクトでも機能するかどうかはわかりません。理論的には、ドメイン オブジェクト/コントローラー/サービス間で一貫性があるはずです。

この記事はあなたを助けるかもしれません

http://www.block-consult.com/blog/2011/08/17/inject-spring-security-service-into-domain-class-for-controller-unit-testing/

于 2015-10-31T17:17:38.283 に答える