Получение исключения NullPointerException при запуске этого кода - PullRequest
0 голосов
/ 27 августа 2011

У меня есть User класс, подобный этому:

package com.grailsinaction

class User {
    String userId
    String password;
    Date dateCreated
    Profile profile
    static hasMany = [posts : Post]
        static constraints = {
        userId(size:3..20, unique:true)
        password(size:6..8, validator : { passwd,user ->
                            passwd!=user.userId
                        })
        dateCreated()
        profile(nullable:true)
        }
    static mapping = {
        profile lazy:false
    }
}

Post класс как этот:

package com.grailsinaction

class Post {
    String content
    Date dateCreated;
    static constraints = {
    content(blank:false)
    }
    static belongsTo = [user:User]
}

И я пишу интеграционный тест так:

//other code goes here
void testAccessingPost() {
        def user = new User(userId:'anto',password:'adsds').save()
        user.addToPosts(new Post(content:"First"))
        def foundUser = User.get(user.id)
        def postname = foundUser.posts.collect { it.content }
        assertEquals(['First'], postname.sort())
    }

И я бегу, используя grails test-app -integration, затем я получаю сообщение об ошибке:

Cannot invoke method addToPosts() on null object
java.lang.NullPointerException: Cannot invoke method addToPosts() on null object
    at com.grailsinaction.PostIntegrationTests.testAccessingPost(PostIntegrationTests.groovy:23

Где я ошибся?

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Быстрое исправление: ваш пароль должен содержать от 6 до 8 символов (проверьте поле ограничений).

Глупая идея, в лучшем случае, иметь максимальный размер пароля (в конечном итоге они должны быть хешированы и не будут похожи на оригинальный пароль).

Могу ли я вместо этого предложить Полное руководство по Grails?

1 голос
/ 27 августа 2011

Я предполагаю, что метод save() возвращает ноль.Попробуйте вместо этого:

def user = new User(userId:'anto',password:'adsds')
user.save() // Do you even need this?
user.addToPosts(new Post(content:"First"))

Согласно документации :

Метод save возвращает ноль, если проверка не удалась, и экземпляр не был сохранен, а экземплярсамо по себе в случае успеха.

Так что, возможно, вы должны смотреть на то, что идет не так в валидации ... вам нужно указать, например, что некоторые поля являются необязательными?(Я не разработчик Grails - просто пытаюсь дать вам несколько идей.)

...