将Mark Gradle源文件夹作为IntelliJ中的测试源

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

Laz*_*ana 9

您需要确保测试源是此包的唯一来源

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插件正确标记源.

  • 不,这不会改变任何东西。 (2认同)

rad*_*tao 5

从 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)

  • 这不起作用。可耻的是没有人能真正提供帮助,是吧? (3认同)

Ar3*_*r3s 5

我知道这已经很旧了,但面临着同样的问题,我发现埋在这个 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 有多糟糕的信息)在我看来有记录......)

请注意,我正在

  • Intellij:IntelliJ IDEA 2021.3.2 (终极版)内部版本#IU-213.6777.52
  • 摇篮:6.7.1