【问题标题】:How to inject springSecurityService Into Grails Domain Class for Controller Unit Testing in Grails 2.4.2如何将 springSecurityService 注入 Grails 域类以在 Grails 2.4.2 中进行控制器单元测试
【发布时间】:2016-01-31 22:30:00
【问题描述】:

我如何在 Grails 域类中注入 springSecurityService 在单元测试控制器时,下面是示例代码,我不断收到错误 can not get encodePassword on null Object 和 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" 
    }

}

【问题讨论】:

    标签: unit-testing grails spring-security grails-domain-class grails-2.4


    【解决方案1】:

    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/

    【讨论】:

    • 我试过了,但在 grails 2.4.2 中不起作用,这似乎适用于旧版本。
    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 2015-12-08
    • 2014-06-29
    • 2016-06-06
    • 2014-06-23
    • 1970-01-01
    • 2015-02-22
    • 2017-05-17
    相关资源
    最近更新 更多