【问题标题】:"Could not find ApplicationContext, configure Grails correctly first"“找不到 ApplicationContext,请先正确配置 Grails”
【发布时间】: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

在站点测试中给出相同的错误。

【问题讨论】:

标签: grails testing integration


【解决方案1】:

感谢 user1690588,我找到了问题所在。 Grails IntegrationSpec IllegalStateException给了我线索:探针不在失败的测试中,而是在通过的测试中!

基本上,ParamIntegrationSpec 测试有:

@TestFor(ParamService)

这会终止任何后续测试。我不知道 TestFor 是做什么的,只在所有示例中都看到过。

要修复,只需从工作测试中删除该行。

【讨论】:

  • 这是一个很好的例子,说明为什么 copypasta 不是一种有效的开发策略 :) @TestFor 是一个 unit 测试注释,它混入你的类假行为以获得单元测试环境,没有真正的 Spring/Hibernate/(大多数)插件/等。 active,看起来有点像集成测试和运行应用程序环境。您不应该混合单元和集成测试代码(逻辑上),但您可以看到它也会对您的测试产生负面影响。情况可能更糟 - 它可能导致误报。
  • TestFor 用于测试服务带来了这个问题,但对于测试控制器,它会注入控制器变量并在集成测试中实例化它。如果不使用,则需要手动创建控制器实例。所以它有点复杂,Grails 文档在如何测试控制器和服务以及单元与集成方面并不是那么好/完整。
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 2019-03-25
  • 2017-11-17
  • 1970-01-01
  • 2017-03-05
  • 2014-11-22
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多