【问题标题】:Cannot run integration test because of IllegalStateException in grails-3.0.1 plugin application由于 grails-3.0.1 插件应用程序中的 IllegalStateException 无法运行集成测试
【发布时间】:2015-07-04 08:56:49
【问题描述】:

上下文:我创建了一个名为“samplePlugin”的新 Grails 插件。它有一个域类 Person 和一个集成测试 PersonSpec。现在,当我运行grails test-app 时,测试失败并出现以下异常:

java.lang.IllegalStateException: Method on class [sampleplugin.Person] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.currentGormInstanceApi(GormEntity.groovy:52)
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:165)
    at sampleplugin.PersonSpec.$tt__$spock_feature_0_1(PersonSpec.groovy:25)
    at sampleplugin.PersonSpec.test save_closure2(PersonSpec.groovy)
    at groovy.lang.Closure.call(Closure.java:423)
    at groovy.lang.Closure.call(Closure.java:439)
    at grails.transaction.GrailsTransactionTemplate$1.doInTransaction(GrailsTransactionTemplate.groovy:67)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
    at grails.transaction.GrailsTransactionTemplate.executeAndRollback(GrailsTransactionTemplate.groovy:64)
    at sampleplugin.PersonSpec.test save(PersonSpec.groovy)

类 Person.groovy 是:

package sampleplugin

class Person {
    String name
}

类 PersonSpec.groovy 是:

package sampleplugin

import grails.test.mixin.integration.Integration
import grails.transaction.*
import spock.lang.*

@Integration
@Rollback
class PersonSpec extends Specification {

  void "canary test"() {
      expect:
          true == true
  }

  void "test save"() {
    when:
      new Person(name: "John Doe").save flush:true
    then:
      1 == Person.count()
  }
}

这里是示例 grails3 插件的 GitHub 链接https://github.com/puneetbehl/samplePlugin.git

【问题讨论】:

    标签: grails grails-plugin grails-3.0 integration-testing


    【解决方案1】:

    我可以通过在 build.gradle 的依赖项下添加 compile "org.grails.plugins:hibernate" 来解决此问题。似乎 Grails 插件应用程序默认没有它。下面是 build.gradle 文件:

    buildscript {
        ext {
            grailsVersion = project.grailsVersion
        }
        repositories {
            mavenLocal()
            maven { url "https://repo.grails.org/grails/core" }
        }
        dependencies {
            classpath "org.grails:grails-gradle-plugin:$grailsVersion"
        }
    }
    
    plugins {
        id "io.spring.dependency-management" version "0.4.0.RELEASE"
        id "com.jfrog.bintray" version "1.1"
    }
    
    version "0.1-SNAPSHOT"
    group "org.grails.plugins"
    
    apply plugin: 'maven-publish'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: "spring-boot"
    apply plugin: "org.grails.grails-plugin"
    apply plugin: "org.grails.grails-gsp"
    // Used for publishing to central repository, remove if not needed
    apply from:'https://raw.githubusercontent.com/grails/grails-profile-repository/master/profiles/plugin/templates/grailsCentralPublishing.gradle'
    apply from:'https://raw.githubusercontent.com/grails/grails-profile-repository/master/profiles/plugin/templates/bintrayPublishing.gradle'
    
    ext {
        grailsVersion = project.grailsVersion
        gradleWrapperVersion = project.gradleWrapperVersion
    }
    
    sourceCompatibility = 1.7
    targetCompatibility = 1.7
    
    
    repositories {
        mavenLocal()
        mavenCentral()
        maven { url "https://repo.grails.org/grails/core" }
    }
    
    dependencyManagement {
        imports {
            mavenBom "org.grails:grails-bom:$grailsVersion"
        }
        applyMavenExclusions false
    }
    
    dependencies {
        provided 'org.springframework.boot:spring-boot-starter-logging'
        provided "org.springframework.boot:spring-boot-starter-actuator"
        provided "org.springframework.boot:spring-boot-autoconfigure"
        provided "org.springframework.boot:spring-boot-starter-tomcat"
    
        provided "org.grails:grails-web-boot"
        provided "org.grails:grails-dependencies"
        provided 'javax.servlet:javax.servlet-api:3.1.0'
    
        compile "org.grails.plugins:hibernate"
    
        testCompile "org.grails:grails-plugin-testing"
    
        console "org.grails:grails-console"
    }
    
    task wrapper(type: Wrapper) {
        gradleVersion = gradleWrapperVersion
    }
    

    【讨论】:

    • 还需要添加compile(group: 'org.hibernate', name: 'hibernate-ehcache', version: '4.3.10.Final')
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多