【发布时间】:2015-03-10 03:11:00
【问题描述】:
我们有一个包含一些领域类和服务等的插件项目。 我们有一个使用插件项目的应用程序项目。 这是一种常见的模式。 集成测试(命中数据库)无法在插件项目中运行,因为它没有应用程序上下文,因此我们在主应用程序项目中运行集成测试。
我们有一个非常简单的集成测试:
/*@TestFor(Site)*/
class SiteIntegrationSpec extends IntegrationSpec {
static transactional=false;
def setup() {
}
def cleanup() {
}
void "test something"() {
Site site
when:
site = Site.get(1L)
then:
site.name == "root"
}
}
站点只是一个域对象,类似这样:
class Site {
String name
// some more fields here
}
注意:用未注释的 TestFor(Site) 进行了尝试 - 同样的错误。
如果我查看数据库,那里有站点条目。
好的,刚刚找到另一个线索。 SiteIntegrationSpec 测试用于工作。在我们添加第二个测试 ParamIntegrationSpec 之前,它就起作用了。如果我们自己运行这些测试中的任何一个:
test-app --stacktrace --verbose ParamIntegrationSpec
作品
test-app --stacktrace --verbose SiteIntegrationSpec
作品
但如果我们同时运行它们:
test-app --stacktrace --verbose *IntegrationSpec
SiteIntegrationSpec 测试总是失败并出现上述异常。
有什么想法吗?
完整的堆栈跟踪:
java.lang.IllegalStateException: Could not find ApplicationContext, configure Grails correctly first
at grails.util.Holders.getApplicationContext(Holders.java:97)
at grails.test.spock.IntegrationSpec.$spock_initializeSharedFields(IntegrationSpec.groovy:41)
注2:
test-app --stacktrace --verbose -integration
在站点测试中给出相同的错误。
【问题讨论】:
-
我不知道为什么会发生这种情况,但是其他一些规范正在做一些污染其他规范的事情。 naleid.com/blog/2012/05/22/…
标签: grails testing integration