【问题标题】:How to get the currentUser provided by spring security in Grails 2 unit testing如何在Grails 2单元测试中获取spring security提供的currentUser
【发布时间】:2018-12-27 03:48:09
【问题描述】:

大家好,我在获取 spring 提供的当前用户时遇到了麻烦。

这是我的单元测试代码

   void "Test if adding project will sucess"() {

    given:
        def createProjectMock = mockFor(UserService)

        createProjectMock.demand.createNewProject { Map projectMap ->
            return true
        }

        controller.userService = createProjectMock.createMock()

    when: "saveProject is execute"

        controller.saveProject()

    then: "page will to the list to view the saved project"
        response.redirectedUrl == '/user/index2'
}

这是我的控制器

def saveProject(ProjectActionCommand projectCmd) {

  def currentUser = springSecurityService.currentUser
  if (projectCmd.hasErrors()) {

    render view: 'createProject', model: [projectInstance: projectCmd, user:currentUser]
  } else {

    def getProjectMap = [:]

    getProjectMap = [
      projectName: params.projectName,
      user: currentUser
    ]

    def saveProject = userService.createNewProject(getProjectMap)

    if (saveProject) {   

      redirect view: 'index2'         
    } else {
      render 'Error upon saving'
    }
  }
}

这是我的服务

  Project createNewProject(Map projectMap){
    def createProject = new Project()

    createProject.with {
      projectName = projectMap.projectName
      user = projectMap.user
    }

    createProject.save(failOnError:true, flush: true)
  }

我总是收到这个错误:

无法在空对象上获取属性“currentUser”。

希望你能帮助我。谢谢

【问题讨论】:

    标签: unit-testing grails spring-security mocking


    【解决方案1】:

    无法在空对象上获取属性“currentUser”。

    表示你没有嘲笑过springSecurityService。让我们在设置部分进行(我假设它在此类中的其他方法中也可能有用):

    def springSecurityService
    
    def setup() {
        springSecurityService = Mock(SpringSecurityService)
        controller.springSecurityService = springSecurityService
    }
    

    此时您的代码将开始工作。但是请记住,您也可以随时模拟实际登录的用户并随时对其进行测试:

        User user = Mock(User)
        springSecurityService.currentUser >> user
    

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 2013-08-24
      • 2017-07-04
      • 2014-02-14
      • 2015-01-15
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 2023-02-04
      相关资源
      最近更新 更多