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)
9条答案
按热度按时间qlfbtfca1#
2021年更新:
8年来发生了很多变化。Gradle仍然是一个很棒的工具。现在文档中有一整节专门用于配置集成测试。我建议您现在就阅读文档。
原始答案:
这花了我一段时间才弄明白,而且在线资源也不是很好,所以我想把我的解决方案记录下来。
这是一个简单的gradle构建脚本,除了主源集和测试源集之外,还包含一个intTest源集:
3htmauhk2#
下面是我在不使用
configurations{ }
的情况下实现这一点的方法。***测试使用:*Gradle 1.4和Gradle 1.6
w3nuxt5m3#
这是曾经在2016年为Gradle 2.x / 3.x编写的,已经过时了!!请看看at the documented solutions in Gradle 4 and up
总结两个旧的答案(得到最好的和最小可行的两个世界):
先说几句温暖的话:
1.首先,我们需要定义
sourceSet
:test
扩展sourceSet
,因此我们使用test.runtimeClasspath
(它包括来自test
的所有相关性ANDtest
本身)作为派生的sourceSet
的类路径:*注意)不知何故,需要对
sourceSets.integrationTest.runtimeClasspath
进行此重新声明/扩展,但由于runtimeClasspath
始终扩展output + runtimeSourceSet
,因此应该是无关紧要的,不要获取它integrationTest
测试类和类路径。java
插件的默认值使用test
sourceSet
check
添加依赖项(这样,当执行build
或check
时,它始终运行)sourceSet
以支持自动检测并在IDE中创建这些“部分”。例如,IntelliJ IDEA将自动为每个集创建sourceSet
目录java和resources(如果它不存在):tl;医生
指的是:
不幸的是,github.com/gradle/gradle/subprojects/docs/src/samples/java/customizedLayout/build.gradle或…/gradle/…/withIntegrationTests/build.gradle上的示例代码似乎没有处理这个问题,或者有一个不同的/更复杂的/对我来说没有更清楚的解决方案!
vsnjm48y4#
星云面插件消除了样板文件:
特别是对于集成测试,即使这是为您完成的,也只需应用:
每个插件的Gradle门户链接为:
crcmnpdw5#
如果您正在使用
要使IntelliJ将自定义源集识别为测试源根,请执行以下操作:
stszievb6#
以下是自Gradle 4.0起适用于我的内容。
从版本4.0开始,Gradle现在为源集中的每种语言使用单独的类目录。因此,如果您的构建脚本使用
sourceSets.integrationTest.output.classesDir
,您将看到以下弃用警告。Gradle现在为每种JVM语言使用单独的输出目录,但此版本假设源集中的所有类使用单个目录。
要消除此警告,只需切换到
sourceSets.integrationTest.output.classesDirs
即可。有关更多信息,请参阅Gradle 4.0发行说明。apeeds0o7#
我想在2012年这个问题被问到的时候,文档并不好,但是对于任何在2020年以后阅读这篇文章的人来说:现在文档中有一整节是关于如何为集成测试添加源代码集的。你真的应该阅读它,而不是复制/粘贴代码片段,然后一头撞到墙上,试图找出为什么2012-2016年的答案不太管用。
答案很可能很简单,但比你想象的要微妙得多,而且你需要的确切代码可能与我需要的代码不同。例如,你希望你的集成测试使用与单元测试相同的依赖关系吗?
63lcw9qa8#
您可能还希望配置测试以使用jUnit运行:
iih3973s9#
我是Gradle的新手,正在使用Gradle 6.0.1 JUnit 4.12。以下是我为解决这个问题而想到的方法。
请注意,主源代码和测试源代码是分别引用的,一个在
main
下,另一个在test
下。dependencies
下的testImplementation
项只用于编译test
中的源代码。如果主代码实际上对JUnit有依赖关系,那么您还应该在dependencies
下指定implementation
。我必须指定
repositories
部分才能让它工作,我怀疑这是最好的/唯一的方法。