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

时间:2017-02-06 09:32:00

标签: java intellij-idea gradle integration-testing

我在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 }
    }
}

为了执行测试,这非常有效,但它会导致IntelliJ检查出现问题,这可能会改变测试代码的行为。 IntelliJ无法将源文件夹识别为测试源。

我尝试添加它们(在subprojects内):

idea {
    module {
        testSourceDirs += file('src/integrationTest/java')
    }
}

但这根本没有帮助。我还尝试手动将它们标记为测试源(上下文菜单 - >标记目录为 - >测试源根目录),但IntelliJ会迅速将其覆盖回正常的源根目录。

如何在Gradle中正确配置?

我在Ubuntu 16.04上使用IntelliJ 2016.1.3和Gradle 2.14.1

2 个答案:

答案 0 :(得分:6)

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

idea {
    module {
        sourceDirs -= file('src/integrationTest/java')
        testSourceDirs += file('src/integrationTest/java')
    }
}

然后你需要gradle cleanIdea idea来重新创建IntelliJ文件。

在使用gradle中的idea插件时,请确保您没有使用IDE gradle集成,如果集成在

,iml文件的自定义更改很可能会与IDE发生冲突>
sourceSets {
    integrationTest {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir "$projectDir/src/integrationTest/java"
        }
        resources.srcDir "$projectDir/src/integrationTest/resources"
    }
}

编辑:Gradle 4.7 Idea插件正确标记了源代码。

答案 1 :(得分:1)

来自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
  }
}