【发布时间】:2013-02-28 18:38:30
【问题描述】:
我有一组基于 Spock 的单元测试,它们在本地通过但失败,在我的 CI (Jenkins) 服务器上记录了以下两个异常。有些测试在这两个例外情况下都失败了,但有些测试只在第一个例外情况下失败。
所有测试都失败并出现此异常:
Account field name is nullable using null(com.vsnap.site.entities.account.organization.OrganizationSpec)
|
java.lang.IllegalStateException: Already value [org.grails.datastore.mapping.transactions.SessionHolder@7f5083c7] for key [org.grails.datastore.mapping.simple.SimpleMapDatastore@62987889] bound to thread [main]
at org.grails.datastore.mapping.core.DatastoreUtils.bindSession(DatastoreUtils.java:337)
at grails.test.mixin.domain.DomainClassUnitTestMixin.connectDatastore(DomainClassUnitTestMixin.groovy:108)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.spockframework.runtime.extension.builtin.JUnitFixtureMethodsExtension$FixtureType$FixtureMethodInterceptor.intercept(JUnitFixtureMethodsExtension.java:145)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:84)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
除了第一个之外,还有一些失败:
java.lang.NullPointerException: Cannot invoke method isActive() on null object
at grails.test.mixin.support.GrailsUnitTestMixin.shutdownApplicationContext(GrailsUnitTestMixin.groovy:232)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.spockframework.runtime.extension.builtin.JUnitFixtureMethodsExtension$FixtureType$FixtureMethodInterceptor.intercept(JUnitFixtureMethodsExtension.java:145)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:84)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
在这些单元测试中,我所做的只是测试域对象的约束:
@TestFor(User)
class UserSpec extends Specification {
def "test user field constraints"() {
when:
def user = new User(name: name)
then:
user.errors['name'] == error
where:
error | name
'blank' | ''
}
}
【问题讨论】:
-
问题是我没有根据文档正确定义依赖项:grails.org/plugin/spock
-
您能说得更具体些吗?我似乎正确定义了依赖项,但是在通过 IntelliJ 运行测试时遇到了类似的问题(测试从我的控制台运行良好)
-
从我的命令行在项目文件夹中运行“grails clean”似乎已经修复了一些问题,但不确定是什么损坏了,但这似乎是问题所在!
-
我很早就看到了这个问题,它消失了一段时间,现在又回来了......非常令人沮丧。我看到它使用 IntelliJ Junit 测试运行程序执行模拟域对象的 Spock 测试。清洁似乎没有帮助。
标签: unit-testing grails grails-2.0 grails-domain-class spock