2013-10-29 117 views
3

我正在爲現有的一組grails 2.1.1應用程序的現有測試添加第一個spock集成測試。使用運行時的試運行和測試都通過了:與其他集成測試一起運行時,Spock集成測試失敗 - 使用集成隔離成功:spock

grails test-app integration:spock CreditServiceSpec 

(是的,一切都在默認的包 - 固定,這是在技術債務大量的工作將不會被批准......文件。)

然而,當我運行所有測試(Grails的測試應用程序),單元測試通不過,斯波克單元測試通過,集成測試通過,但我得到石破天驚整合的失敗:

|完成818集成測試,0失敗104001ms |運行1次spock測試... |失敗:CreditServiceSpec | groovy.lang.GroovyRuntimeException:無法調用構造函數:public org.codehaus.groovy.grails.test.support.GrailsTestAutowirer(org.springframework.context.ApplicationContext)with arguments:[] reason:java.lang.IllegalArgumentException at grails。 plugin.spock.IntegrationSpec。$ spock_initializeSharedFields(IntegrationSpec.groovy:33) |完成0次spock測試,33次失敗0次 |測試通過 - 查看報告中/用戶/ * /項目/ GrailsPlugins/DomainServices /目標/測試報告

我得到完全相同的異常是否我運行完整測試我建或以下,非常帶倒例如:

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) 

但確定如何/爲什麼ApplicationContext已不爲是p正確地超越了我,也許是我的問題的主旨。

有沒有人遇到過這種行爲,並找到了一種讓spock集成與其他測試一起玩的好方法?謝謝。

回答

1

它看起來像Grails 2.1.1有several issues與集成範圍內的Spock測試。 Jeff's commentPeter's特別像你遇到的問題;基本上,ApplicationHolder爲空或列表爲空。

父任務列出Grails 2.2.5作爲修復版本。任何機會,你可以升級到(或更晚的版本),看看問題是否存在?

也有一些情況下,簡單grails cleanhas fixed issues like this

+0

感謝您的反饋。 'grails clean'在這種情況下不是一個解決方法。雖然我希望移動到2.3。x此應用程序/案例的生存時間可能會阻止獲得足夠的優先權。如果這成爲現實,並且該版本確實提供了修復,我將確保在此回報。 – reverend

+0

我覺得你在那裏。我不知道的東西可能會幫助您擺脫您的特定能力:完全有可能讓Grails應用程序在同一個Tomcat服務器上運行不同的版本。如果此項目包含在其自己的應用程序中,則可以嘗試克隆副本並在不同的Grails版本下運行它。 gvm可以幫助您在機器上快速獲得另一個Grails版本,而不會有太多麻煩。 http://gvmtool.net/ – jonnybot

1

我有一個問題完全相同的症狀。

我正在使用BuildTestData插件,並在IntegrationSpec中使用了@Build註釋,但是使用@Build使用了一個轉換,它擴展了與Intengration運行時不兼容的@TestFor轉換。

所以只要刪除@Build註解,它就會運行。