我想添加集成測試到我的Gradle版本(版本1.0)。它們應該與我的正常測試分開運行,因爲它們需要將Web應用程序部署到本地主機(他們測試該Web應用程序)。測試應該能夠使用我的主要源集中定義的類。我如何做到這一點?如何添加一個新的源代碼到Gradle?
回答
這花了我一段時間才弄清楚,在線資源並不是很好。所以我想記錄我的解決方案。
這是一個具有intTest源除了主要和測試源集設置一個簡單的gradle這個構建腳本:
apply plugin: "java"
sourceSets {
// Note that just declaring this sourceset creates two configurations.
intTest {
java {
compileClasspath += main.output
runtimeClasspath += main.output
}
}
}
configurations {
intTestCompile.extendsFrom testCompile
intTestRuntime.extendsFrom testRuntime
}
task intTest(type:Test){
description = "Run integration tests (located in src/intTest/...)."
testClassesDir = project.sourceSets.intTest.output.classesDir
classpath = project.sourceSets.intTest.runtimeClasspath
}
這是我如何實現這不使用configurations{ }
。
apply plugin: 'java'
sourceCompatibility = JavaVersion.VERSION_1_6
sourceSets {
integrationTest {
java {
srcDir 'src/integrationtest/java'
}
resources {
srcDir 'src/integrationtest/resources'
}
compileClasspath += sourceSets.main.runtimeClasspath
}
}
task integrationTest(type: Test) {
description = "Runs Integration Tests"
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath += sourceSets.integrationTest.runtimeClasspath
}
使用測試:搖籃1.4和搖籃1.6
感謝分享!很高興看到其他實現。 – Spina 2013-06-03 18:35:52
而'{java的 SRCDIR「SRC/integrationtest/Java的 } 資源{ SRCDIR 'SRC/integrationtest /資源' }'是不相關的,因爲它只是redeclares'SRC/
綜上所述既古老答案(得到最好的和最小可行兩全其美):
一些溫暖的話第一:
首先,我們需要定義sourceSet:
sourceSets { integrationTest }
- 下一個
我們從測試擴大sourceSet,爲此我們使用測試runtimeClasspath(其中包括從測試的所有DEPS和測試本身)的類路徑派生sourceSet
sourceSets { integrationTest { compileClasspath += sourceSets.test.runtimeClasspath runtimeClasspath += sourceSets.test.runtimeClasspath // ***) } }
- ***注)這種莫名其妙對於sourceSets.integrationTest.runtimeClasspath重複宣告/擴展是必要的,但應該是無關緊要的,因爲runtimeClasspath總是擴展
output + runtimeSourceSet
,不明白這一點
- ***注)這種莫名其妙對於sourceSets.integrationTest.runtimeClasspath重複宣告/擴展是必要的,但應該是無關緊要的,因爲runtimeClasspath總是擴展
我們定義了一個專門的任務只是運行集成測試
task integrationTest(type: Test) { }
知道哪些測試類和類路徑,而應使用默認設置從 「測試」 sourceset測試作業
task integrationTest(type: Test) { testClassesDir = sourceSets.integrationTest.output.classesDir classpath = sourceSets.integrationTest.runtimeClasspath }
(可選)自動運行後測試
integrationTest.dependsOn test
(可選)自動運行檢查
check.dependsOn integrationTest
(可選)將java資源添加到sourceSet以允許自動檢測並在您的IDE中創建這些「偏好」。即IntelliJ IDEA的自動創建一個sourceSet目錄java和資源爲每套如果不存在
sourceSets { integrationTest { java resources } }
TL它;博士
apply plugin: 'java'
// apply the runtimeClasspath from "test" sourceSet to the new one
// to include any needed assets: test, main, test-dependencies and main-dependencies
sourceSets {
integrationTest {
// not necessary but nice for IDEa's
java
resources
compileClasspath += sourceSets.test.runtimeClasspath
// somehow this redeclaration is needed, but should be irrelevant
// since runtimeClasspath always expands compileClasspath
runtimeClasspath += sourceSets.test.runtimeClasspath
}
}
// define custom test task for running integration tests
task integrationTest(type: Test) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
}
integrationTest.dependsOn test
指:
- gradle java chapter 45.7.1. Source set properties
- gradle java chapter 45.7.3. Some source set examples
不幸的是,在github.com/gradle/gradle/subprojects/docs/src/samples/java/customizedLayout/build.gradle或…/gradle/…/withIntegrationTests/build.gradle示例代碼似乎沒有處理這個還是有不同的/更復雜的/我沒有清晰的解決方案呢!
(!),事實證明,在沒有配置或輸出的情況下單獨使用sourceSet增強會導致在初始打開項目。第一個「compileTestJava」不支持新的「模塊」(這裏是:integrationTest)的構建依賴關係(這裏是:test) – 2016-08-01 13:20:02
的nebula-facet插件消除了樣板:
apply plugin: 'nebula.facet'
facets {
integrationTest {
parentSourceSet = 'test'
}
}
對於集成測試具體而言,即使this is done for you,只是適用於:
apply plugin: 'nebula.integtest'
的搖籃插件門戶網站鏈接的每個有:
從Gradle 4.0開始,這對我有用。
sourceSets {
integrationTest {
compileClasspath += sourceSets.test.compileClasspath
runtimeClasspath += sourceSets.test.runtimeClasspath
}
}
task integrationTest(type: Test) {
description = "Runs the integration tests."
group = 'verification'
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
}
從版本4.0開始,Gradle現在爲源集中的每種語言使用單獨的類目錄。因此,如果您的構建腳本使用sourceSets.integrationTest.output.classesDir
,則會看到以下棄用警告。
Gradle現在爲每種JVM語言使用單獨的輸出目錄,但是此構建假設源集中所有類的單個目錄。此行爲已被棄用,並計劃在Gradle 5.0中刪除。
要擺脫此警告,只需切換到sourceSets.integrationTest.output.classesDirs
。欲瞭解更多信息,請參閱Gradle 4.0 release notes。
- 1. 如何使用gradle添加新的源代碼kotlin-dsl
- 2. 添加一個新的VS2015項目到源代碼控制
- 3. 將新驅動程序代碼添加到linux源代碼
- 4. 如何從Gradle插件添加一個文件夾到Android項目源代碼集
- 5. 在IntelliJ中附加gradle源代碼
- 6. 如何在gradle插件中添加新的語言源目錄?
- 7. android gradle任務源代碼
- 8. 將圖像添加到源代碼
- 9. 添加代碼片段到一個類
- 10. 如何添加一個活動狀態到這個jQuery代碼
- 11. 如何將一個代碼添加到四個類中?
- 12. 如何將源代碼添加到Intellij Idea的scala項目中?
- 13. 如何將數據源添加到ssrs中的代碼?
- 14. 如何添加一個小部件的代碼到主屏幕
- 15. 如何添加另一個對象到我的單例代碼?
- 16. 如何添加一個OnClicklistener到這種類型的代碼
- 17. 如何添加一個新的編碼到python 2.6?
- 18. 如何添加到網站源代碼,如果它匹配的某一頁?
- 19. 無法附加添加源代碼到一個JAR文件中Maven的依賴
- 20. 無法將新項目添加到源代碼管理?
- 21. 使用Gradle創建一個FAT僅限源代碼的罐子
- 22. 如何在gradle 2.1中添加源設置到Java項目?
- 23. 如何將第三方jar添加到android源代碼
- 24. 如何將.bundle添加到Xcode 4源代碼控制?
- 25. 如何將生成的源文件夾添加到Gradle中的源路徑中?
- 26. 如何添加一個listview片段到這段代碼?
- 27. 如何添加一個代碼隱藏到asp.net mvc視圖?
- 28. 我該如何構建一個包含非源代碼構件的Gradle項目?
- 29. 定製gyp和gypi文件的鉻源代碼添加一個新文件
- 30. 如何在href後面的代碼中添加一個圖像源在asp.net中
您仍然需要聲明和配置集成測試任務。在文檔方面,完整的Gradle發行版中有一個'java/withIntegrationTests'樣例。 – 2012-07-20 15:09:45
感謝@PeterNiederwieser我已更正我的示例生成腳本。 – Spina 2012-07-23 13:45:03
我試圖做到這一點以及...非常感謝你張貼解決方案:) – 2012-10-15 11:15:05