2017-07-04 141 views
0

我的應用程序是春季啓動應用程序暴露出一些REST API如何在gradle中運行任務後運行集成任務?

運行我的集成測試,首先將應用程序必須運行起來,我的應用程序gradle這個基礎,如何確保當我執行命令提示符下的gradle命令,第一次應用程序運行和集成測試將運行。

task integration(type: Test, description: 'Runs the integration tests.', group: 'Verification') { 
    testClassesDir = sourceSets.integration.output.classesDir 
    classpath = sourceSets.integration.runtimeClasspath 
    outputs.upToDateWhen { false } 
} 

task appRunAndIntegrtationTest { 
    dependsOn 'run' 
    dependsOn 'integration' 
    tasks.findByName('integration').mustRunAfter 'run' 
} 

我加入上面的代碼的build.gradle,但應用程序運行起來,這就是它,它停留他們唯一的,集成測試沒有運行,任何人都可以有想法在這個請。

更新:@Strelok,如上所述,應用程序啓動並且集成任務未運行。

更新1:我發現一個gradle這個插件

https://github.com/marc0der/gradle-spawn-plugin

我試圖使用如下

task startServer(type: SpawnProcessTask, dependsOn: 'assemble') { 
    command "java -jar ${projectDir}/build/libs/example.jar" 
    ready 'Started Application' 
} 

task stopServer(type: KillProcessTask) 

,但我得到的例外下面

* >不能克以及類型爲org.gradle.api.Project的根項目'example-api'的未知屬性'SpawnProcessTask'。 *嘗試: 使用--stacktrace選項運行以獲取堆棧跟蹤。與--info或--debug選項來運行,以獲得更多的日誌輸出。*

請有人請提出這個

+0

什麼?清除你的帖子 – Edwin

+0

@Edwin,沒有得到你的評論。 – Bravo

+0

修改您的帖子 - 不可理解! – Edwin

回答

0

你應該聲明,集成測試任務需要依賴於你的應用程序運行的任務。

appRun只是一個示例,請使用作爲集成測試前驅任務的名稱。

integration.dependsOn appRun 
integration.mustRunAfter appRun 

此外,它可能會像你的應用程序正在運行,並阻止你的搖籃構建,並生成實際完成進度或者它只是掛起,直到應用程序停止運行?

0

我建議一種不同的方法:從你的測試框架開始和停止你的應用程序。測試框架支持您的測試套件的設置和清理步驟(例如JUnit中的BeforeClassAfterClass),在設置步驟中啓動應用程序,並在清理步驟中停止它。這種方法將使您的測試更加獨立,其成功/失敗將不取決於測試代碼之外的因素。

即使您更願意在測試框架之外運行應用程序,我建議在Java類中包裝此邏輯(即啓動應用程序,運行測試,停止應用程序),並通過任務從Gradle執行此類類型爲JavaExec。這將比通過Gradle任務處理所有這些要清楚得多。最後,如果你仍然堅持Gradle任務,就像評論者所說:「運行」任務可能會在應用程序運行時阻止執行。處理這個問題的唯一方法是在後臺啓動應用程序,在測試完成後使用另一個應用程序停止應用程序(使用finalizedBy)。