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
}
tasks.integrationTest.dependsOn(tasks.test)
6 回答
我花了一段时间才弄明白,在线资源并不是很好 . 所以我想记录我的解决方案 .
这是一个简单的gradle构建脚本,除了main和test源集外,还有一个intTest源集:
这是我如何在不使用
configurations{ }
的情况下实现这一目标 .Tested using: Gradle 1.4和Gradle 1.6
总结两个旧答案(获得两个世界的最佳和最低可行性):
先说一些温暖的话:
sourceSet
:test
展开sourceSet
,因此我们使用test.runtimeClasspath
(其中包括来自test
ANDtest
本身的所有依赖项)作为派生sourceSet
的类路径:note )不知何故需要重新声明/扩展
sourceSets.integrationTest.runtimeClasspath
,但应该是无关紧要的,因为runtimeClasspath
总是扩展output + runtimeSourceSet
,不要得到它我们定义了一个专门用于运行集成测试的任务:
integrationTest
测试类和类路径使用 .java
插件的默认值使用test
sourceSet
check
添加依赖项(因此它始终在执行build
或check
时运行)sourceSet
以支持自动检测并在IDE中创建这些"partials" . 即IntelliJ IDEA将自动为每个集创建sourceSet
目录java和资源(如果它不存在):tl;dr
指的是:
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上的示例代码似乎没有处理这个或者有一个不同/更复杂/对我来说无论如何都没有更清晰的解决方案!
nebula-facet插件消除了样板:
对于集成测试,甚至this is done for you,只需应用:
每个Gradle插件门户链接是:
nebula.facet
nebula.integtest
这对Gradle 4.0来说对我有用 .
从4.0版开始,Gradle现在为源集中的每种语言使用单独的类目录 . 因此,如果您的构建脚本使用
sourceSets.integrationTest.output.classesDir
,您将看到以下弃用警告 .要摆脱此警告,只需切换到
sourceSets.integrationTest.output.classesDirs
即可 . 有关更多信息,请参阅Gradle 4.0 release notes .如果你正在使用
Gradle 5.x,看看Documentation Section "Testing Java > Configuring integration tests示例14和15了解详情(Groovy和Kotlin DSL,你喜欢哪一个)
alt:"current" 2的Gradle文档链接,但将来可能会推迟,您应该查看示例是否更改)
for Gradle 4看看古代版3哪个接近@Spina posted in 2012
要使IntelliJ将自定义源集识别为测试源root: