unit-testing - 如何将 springSecurityService 注入(inject) Grails 域类以在 Grails 2.4.2 中进行 Controller 单元测试

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

我如何在 Grails 域类中注入(inject) springSecurityService 在单元测试 Controller 时,以下是示例代码,我不断收到错误 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" 
    }

}

最佳答案

Grails 2.x 支持使用'defineBeans' 闭包为测试环境定义spring bean。它支持 Controller 等中的依赖注入(inject),我不确定它是否也适用于域对象。从理论上讲,它应该在域对象/ Controller /服务之间保持一致

这篇文章可以帮助你

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

关于unit-testing - 如何将 springSecurityService 注入(inject) Grails 域类以在 Grails 2.4.2 中进行 Controller 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33453920/

相关文章:

Bash:如何测试 mkdir 命令的失败?

javascript - Grails - 是否可以绑定(bind)已发布的 JS 对象中的字段(AJAX)

具有多个数据库的 Grails Multi-Tenancy (每个租户一个)2.4.0

java - 使用 spring-boot 对 Rest 服务进行访问控制

c# - NSubstitute 模拟 Mongo IFindFluent 不起作用

python - Magento 的 pyUnit 单元测试是个好主意吗?

mongodb - 在 Grails 3.x 中安装和使用 MongoDB

java - 拒绝 Spring Security 中所有角色对特定 URL 的访问

google-app-engine - GAE Java 授权框架

unit-testing - 如何从 QTestLib/QTest 获取测试失败的信息