我想集成测试添加到我的摇篮版本(1.0版)。 他们应该因为他们需要被部署web应用程序到本地主机(他们测试Web应用程序)从我的正常测试单独运行。 测试应该能够使用我的主要来源集中定义的类。 如何做到这一点?
Answer 1:
这花了我一段时间才能找出和在线资源是不是很大。 所以我想我的文档解决方案。
这是一个具有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
}
Answer 2:
这是我如何实现这一点没有使用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
Answer 3:
这曾经在2016年写给摇篮2.X / 3.X和远远过时 ! 请看看在摇篮4,上了记录的解决方案
综上所述既古老答案(获得最佳的和最小的可行两全其美的):
一些温暖的话第一:
首先,我们需要定义
sourceSet
:sourceSets { integrationTest }
接下来我们扩大
sourceSet
从test
,为此我们使用test.runtimeClasspath
(包括从所有dependenciesstest
和test
本身)的类路径派生sourceSet
:sourceSets { integrationTest { compileClasspath += sourceSets.test.runtimeClasspath runtimeClasspath += sourceSets.test.runtimeClasspath // ***) } }
- 注 )不知何故此再次声明/延长
sourceSets.integrationTest.runtimeClasspath
是必要的,但应该是无关紧要的,因为runtimeClasspath
总是扩展output + runtimeSourceSet
,不明白这一点
- 注 )不知何故此再次声明/延长
我们定义了一个专门的任务只是运行集成测试:
task integrationTest(type: Test) { }
配置
integrationTest
测试类和类路径中使用。 从默认java
插件使用test
sourceSet
task integrationTest(type: Test) { testClassesDir = sourceSets.integrationTest.output.classesDir classpath = sourceSets.integrationTest.runtimeClasspath }
测试后(可选)自动运行
integrationTest.dependsOn测试
(可选)从添加依赖
check
(所以当它始终运行build
或check
执行)tasks.check.dependsOn(tasks.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
}
tasks.integrationTest.dependsOn(tasks.test)
指的是:
- java的gradle这个章节45.7.1。 来源组属性
- java的gradle这个章节45.7.3。 某些源代码集的例子
不幸的是,在示例代码github.com/gradle/gradle/subprojects/docs/src/samples/java/customizedLayout/build.gradle或... / gradle产出/ ... / withIntegrationTests /的build.gradle似乎没有处理这个或有不同/更复杂的/我没有清晰的解决方案呢!
Answer 4:
该星云,小插件消除了样板:
apply plugin: 'nebula.facet'
facets {
integrationTest {
parentSourceSet = 'test'
}
}
对于集成测试具体地讲,即使这是为你做 ,只是适用于:
apply plugin: 'nebula.integtest'
对于每个摇篮插件门户网站链接:
- nebula.facet
- nebula.integtest
Answer 5:
下面是我什么工作原理摇篮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版本,现在摇篮使用单独的类目录中源集中的每个语言。 所以,如果你的构建脚本使用sourceSets.integrationTest.output.classesDir
,你会看到下面的弃用警告。
摇篮现在使用单独的输出目录中每个JVM的语言,但这个版本假设从源集合中的所有类的单一目录。 此行为已取消,并计划在摇篮5.0被删除
为了摆脱这一警告的,只需切换到sourceSets.integrationTest.output.classesDirs
代替。 欲了解更多信息,请参见摇篮4.0发行说明 。
Answer 6:
如果您在使用
- 摇篮5.x的,看看文件科“测试Java>配置集成测试例14和15的详细信息(包括Groovy和DSL科特林,你更喜欢其中任一个)
- ALT:在“当前”摇篮文档链接2 ,但将来可能会推迟,你应该,如果变化的例子来看看)
- 对于摇篮4看看古代版3这是附近什么密切@Spina发布于2012年
要获得的IntelliJ认识到定制sourceset的测试源根:
plugin {
idea
}
idea {
module {
testSourceDirs = testSourceDirs + sourceSets["intTest"].allJava.srcDirs
testResourceDirs = testResourceDirs + sourceSets["intTest"].resources.srcDirs
}
}