Grails 当使用Integration:Spock与其他集成测试单独成功运行时,Spock集成测试失败

Grails 当使用Integration:Spock与其他集成测试单独成功运行时,Spock集成测试失败,grails,integration-testing,spock,Grails,Integration Testing,Spock,我正在为Grails2.1.1应用程序的现有测试集添加第一个spock集成测试。测试运行和测试通过时使用: grails test-app integration:spock CreditServiceSpec (是的,所有内容都在默认包中-修复这是一项大量的工作,将不会得到批准…在技术债务下归档。) 但是,当我运行所有测试(grails测试应用程序)、单元测试通过、spock单元测试通过、集成测试通过时,spock集成失败如下: |已完成818个集成测试,0个在104001ms内失败 |正在

我正在为Grails2.1.1应用程序的现有测试集添加第一个spock集成测试。测试运行和测试通过时使用:

grails test-app integration:spock CreditServiceSpec
(是的,所有内容都在默认包中-修复这是一项大量的工作,将不会得到批准…在技术债务下归档。)

但是,当我运行所有测试(grails测试应用程序)、单元测试通过、spock单元测试通过、集成测试通过时,spock集成失败如下:

|已完成818个集成测试,0个在104001ms内失败 |正在运行1 spock测试。。。 |失败:CreditServiceSpec |groovy.lang.GroovyRuntimeException:调用构造函数失败:public org.codehaus.groovy.grails.test.support.GrailStatuWirer(org.springframework.context.ApplicationContext),参数:[]原因:java.lang.IllegalArgumentException 位于grails.plugin.spock.IntegrationSpec.$spock_initializeSharedFields(IntegrationSpec.groovy:33) |已完成0 spock测试,0在33毫秒内失败 |测试通过-在/Users/*/projects/GrailsPlugins/DomainServices/target/testreports中查看报告

无论是运行我构建的完整测试还是以下非常精简的示例,我都会得到完全相同的异常:

import grails.plugin.spock.IntegrationSpec

class CreditServiceSpec extends IntegrationSpec {
    def setup() {}
    def cleanup() {}

    public void "sample"() {
        setup:"Nothing to do here."

        expect:"This is the truest of truths..."
        true == true
    }
}
我打开了IntegrationSpec并查看了第33行:

@Shared private autowirer = new GrailsTestAutowirer(applicationContext)
但是,我无法确定应用程序上下文如何/为什么没有被正确传递,也许这是我问题的重点


有没有人遇到过这种行为,并找到了让spock集成与其他测试配合良好的方法?谢谢。

看起来Grails 2.1.1在集成范围内使用了Spock测试。尤其是听起来像是你的问题;基本上,ApplicationHolder为null或为空列表

父任务将Grails2.2.5列为修复版本。您是否有机会升级到该版本(或更高版本),看看问题是否仍然存在


也有一些情况下,一个简单的
grailsclean

我也有同样的症状

我使用的是BuildTestData插件,并在IntegrationSpec中使用了@Build注释,但使用@Build with use a转换扩展了@TestFor转换,该转换与Integration运行时不兼容


所以只要删除@Build注释,它就会运行。

感谢您的反馈<代码>grails clean在本例中不是一个修复程序。虽然我希望迁移到2.3.x,但此应用程序/案例的生存时间可能会妨碍其获得足够的优先级。如果这成为现实,并且版本确实提供了修复,我一定会在这里报告。我感觉到你在那里。一些我不知道的事情可能会影响你的特殊能力:在同一个Tomcat服务器上运行不同版本的Grails应用程序是完全可能的。如果这个项目包含在它自己的应用程序中,您可以尝试克隆一个副本并在不同的Grails版本下运行它。gvm非常有助于在您的机器上快速安装另一个Grails版本,而无需太多麻烦。