在同一个项目中是否有使用Spock和Spring Security插件的错误?

时间:2012-03-23 14:01:29

标签: grails spring-security grails-plugin spock

我在当前项目中使用Spring和Spock插件。我在Spock中写了一堆测试用例。所有人都没有任何错误(全部都是绿色!)。但是如果我在一段时间后尝试测试应用程序,那么相同的测试都会失败。我不知道为什么会这样。这是代码(我的失败测试之一):

def 'list action: 1 user'() { 

   setup: 
      mockDomain(User,[userInstance]) 

   expect: 
      controller.list() == [userInstanceList: [userInstance] , userInstanceTotal: 1] 
      params.max == 10 

   where: 
      userInstance = new User(username:"antoaravinth",password:"secrets") 
} 

我收到了一个很大的错误:

java.lang.NullPointerException: Cannot invoke method encodePassword() on null object 
        at mnm.schedule.User.encodePassword(User.groovy:34) 
        at mnm.schedule.User.beforeInsert(User.groovy:42) 
        at org.grails.datastore.gorm.events.DomainEventListener.invokeEvent(DomainEventListener.java:188) 
        at org.grails.datastore.gorm.events.DomainEventListener.beforeInsert(DomainEventListener.java:110) 
        at org.grails.datastore.gorm.events.DomainEventListener.onPersistenceEvent(DomainEventListener.java:73) 
        at org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:46) 
        at org.grails.datastore.mapping.engine.EntityPersister.cancelInsert(EntityPersister.java:227) 
        at org.grails.datastore.mapping.engine.NativeEntryEntityPersister.executeInsert(NativeEntryEntityPersister.java:1321) 
        at org.grails.datastore.mapping.engine.NativeEntryEntityPersister$1.run(NativeEntryEntityPersister.java:698) 
        at org.grails.datastore.mapping.core.impl.PendingOperationExecution.executePendingOperation(PendingOperationExecution.java:33) 
        at org.grails.datastore.mapping.core.AbstractSession.flushPendingOperations(AbstractSession.java:322) 
        at org.grails.datastore.mapping.core.AbstractSession.flushPendingInserts(AbstractSession.java:314) 
        at org.grails.datastore.mapping.core.AbstractSession.flush(AbstractSession.java:237) 
        at org.grails.datastore.mapping.query.Query.flushBeforeQuery(Query.java:596) 
        at org.grails.datastore.mapping.query.Query.list(Query.java:562) 
        at org.grails.datastore.mapping.query.Query.singleResult(Query.java:606) 
        at org.grails.datastore.gorm.GormStaticApi.count_closure11(GormStaticApi.groovy:311) 
        at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:301) 
        at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:34) 
        at org.grails.datastore.gorm.GormStaticApi.count(GormStaticApi.groovy:307) 
        at mnm.schedule.UserController.list(UserController.groovy:241) 
        at mnm.schedule.UserControllerSpec.list action: 1 user(UserControllerSpec.groovy:34)

域类:

package mnm.schedule
import org.example.*;
class User extends SecUser {
    Profile profile
    String username
    String password
    static constraints = {
    username(unique:true,size:3..15, blank:false)
    password(blank:false)
    String toString() {
        this.username
    }

    static mapping = {
        cache true
    }
    protected void encodePassword() {
    password = springSecurityService.encodePassword(password)
}

Set<SecRole> getAuthorities() {
    SecUserSecRole.findAllBySecUser(this).collect { it.secRole } as Set
}

def beforeInsert() {
    encodePassword()
}

def beforeUpdate() {
    if (isDirty('password')) {
        encodePassword()
    }
}

}

同样的测试有时会传递此错误。这里有什么不对?它有时会过去而有时会失败吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)