Есть ли какая-либо ошибка при использовании плагина Spock и Spring Security в одном проекте? - PullRequest
4 голосов
/ 23 марта 2012

Я использую плагины Spring и 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 Ответ

4 голосов
/ 23 марта 2012

Проверьте этот блог как пример насмешливого SpringSecurityService в доменных объектах

http://www.block -consult.com / blog / 2011/08/17 / inject-spring-security-service-into-доменный класс-для-контроллера-юнит-тестирования / или проверка https://stackoverflow.com/a/9789619/206351

...