简单控制器上的Grails单元测试获得Null指针异常

时间:2014-04-02 18:29:41

标签: unit-testing grails grails-2.3

我正在完成Grails 2权威指南中的示例,所有单元测试都与我使用的版本(2.3.7)不同。

我尝试做的是测试如果确认密码和密码字段不相同,我在UserController中的register方法将抛出错误。这本书给出了这样的测试

void testPasswordsDoNotMatch() {
    request.method = 'POST'

    params.login = 'henry'
    params.password = 'password'
    params.confirm = 'wrongPassword'
    params.firstName = 'Henry'
    params.lastName = 'Rollins'

    def model = controller.register()
    def user = model.user

    assert user.hasErrors()
    assert 'user.password.dontmatch' == user.errors['password'].code
}

很明显,这不起作用,所以我把它放在一起:

    void "test PasswordsDoNotMatch"() {
    given: 
        params.login='henry'
        params.password='password'
        params.confirm='wrongPassword'
        params.firstName='Henry'
        params.lastName='Rollins'

    when:
        def model = controller.register()
        def user = model.user

    then:
         user.hasErrors()
         'user.password.dontmatch' == user.errors['password'].code


}

我的UserController看起来像这样:

    package com.gtunes

class UserController {


def register() {
    if(request.method =='POST'){
        def u = new User(params)
        u.properties['login', 'password', 'firstName', 'lastName'] = params
        if(u.password != params.confirm){
            u.errors.rejectValue("password", "user.password.dontmatch")
            return [user:u]
        } else if(u.save()) {
            session.user = u
            redirect controller:"store"
        } else {
            return[user:u]
        }

    }


}

}

当我使用命令grails>运行测试时test-app UserController,我收到以下错误:

  

失败:|   测试PasswordsDoNotMatch(com.gtunes.UserControllerSpec)   |   java.lang.NullPointerException:无法获取属性' user'在null对象上          在com.gtunes.UserControllerSpec.test PasswordsDoNotMatch(UserController   Spec.groovy:38)

似乎我所制作的代码实际上并没有按照我的预期创建用户,而且我不确定我做错了什么,或者正确的方法是测试一下。我在这里阅读了文档:Grails testing,我不确定我错过了什么。任何帮助表示赞赏。

0 个答案:

没有答案