Jor*_*orn 13 java integration-testing intellij-idea gradle
我在gradle中设置了集成测试源文件夹,如下所示:
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
sourceCompatibility = 1.8
configurations {
integrationTestCompile.extendsFrom testCompile
integrationTestCompileOnly.extendsFrom integrationTestCompile
integrationTestCompileOnly.extendsFrom testCompileOnly
integrationTestRuntime.extendsFrom testRuntime
}
sourceSets {
integrationTest {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('src/integrationTest/java')
}
resources.srcDir file('src/integrationTest/resources')
}
}
task integrationTest(type:Test) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
outputs.upToDateWhen { false }
}
}
Run Code Online (Sandbox Code Playgroud)
为了执行测试,这非常有效,但它会导致IntelliJ的检查出现问题,这可能会改变测试代码的行为.IntelliJ无法将源文件夹识别为测试源.
我尝试添加它们(内部subprojects):
idea {
module {
testSourceDirs += file('src/integrationTest/java')
}
}
Run Code Online (Sandbox Code Playgroud)
但这根本没有帮助.我还尝试手动将它们标记为测试源(上下文菜单 - >将目录标记为 - >测试源根目录),但IntelliJ会快速覆盖它回到正常的源根目录.
如何在Gradle中正确配置?
我在Ubuntu 16.04上使用IntelliJ 2016.1.3和Gradle 2.14.1
您需要确保测试源是此包的唯一来源
idea {
module {
sourceDirs -= file('src/integrationTest/java')
testSourceDirs += file('src/integrationTest/java')
}
}
Run Code Online (Sandbox Code Playgroud)
然后你需要gradle cleanIdea idea重新创建IntelliJ文件.
sourceSets {
integrationTest {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir "$projectDir/src/integrationTest/java"
}
resources.srcDir "$projectDir/src/integrationTest/resources"
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:Gradle 4.7 Idea插件正确标记源.
从 JetBrains 问题:
https://youtrack.jetbrains.com/issue/IDEA-151925#comment=27-2355076
apply plugin: 'java'
sourceSets {
integrationTest
}
apply plugin: 'idea'
idea {
module {
testSourceDirs += project.sourceSets.integrationTest.java.srcDirs
testSourceDirs += project.sourceSets.integrationTest.resources.srcDirs
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这已经很旧了,但面临着同样的问题,我发现埋在这个 jetbrains 票证中的某个地方暗示你的测试sourceSet应该在 gradle 中声明,如下所示:
sourceSets {
integrationTest {
test{ //<- note this, this is what flags it right for intelliJ to process it correctly
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('src/integrationTest/java')
// note that you'll need to specify the outputDir for it to work
// I don't fully get the reasons for this (but I rarely do when it comes to gradle anyway)
outputDir = file("build/classes/java/integrationTest")
}
resources {
srcDir file('src/integrationTest/resources')
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样做使 intelliJ 立即识别我的集成测试文件夹,就像测试源一样......
[小咆哮]我找不到相应的 gradle 文档的踪迹,而且我经常从逆向工程中找到有关它如何工作的信息,或者在这种情况下尝试/错误+ IntelliJ youtrack 票证中缺乏提示(这说明了很多关于 gradle 有多糟糕的信息)在我看来有记录......)
请注意,我正在
| 归档时间: |
|
| 查看次数: |
6620 次 |
| 最近记录: |