Kotlin添加集成测试模块

时间:2018-07-21 11:44:59

标签: gradle intellij-idea kotlin gradle-plugin intellij-idea-2018

我正在尝试向我的Kotlin项目中添加一个专门用于集成测试的模块-与由kotlin插件创建的标准test模块一起使用。这是我当前添加sourceset的配置:

sourceSets {
    testIntegration {
        java.srcDir 'src/testIntegration/java'
        kotlin.srcDir 'src/testIntegration/kotlin'
        resources.srcDir 'src/testIntegration/resources'
        compileClasspath += main.output
        runtimeClasspath += main.output
    }
}

configurations {
    provided
    testCompile.extendsFrom provided
    testIntegrationCompile.extendsFrom testCompile
    testIntegrationRuntime.extendsFrom testRuntime
}

task testIntegration(type: Test) {
    testClassesDirs = sourceSets.testIntegration.output.classesDirs
    classpath = sourceSets.testIntegration.runtimeClasspath
}

这似乎可行,但是IntelliJ不会选择新的源集作为测试模块。我可以手动标记它,但是每次Gradle运行时它都会重置。这也意味着Intellij会填充项目结构设置中的Output Path而不是Test Output Path字段。

要修复以下配置,请执行以下操作:

apply plugin: 'idea'

idea {
    module {
        testSourceDirs += project.sourceSets.testIntegration.java.srcDirs
        testSourceDirs += project.sourceSets.testIntegration.kotlin.srcDirs
        testSourceDirs += project.sourceSets.testIntegration.resources.srcDirs
    }
}

但是,这似乎指示IntelliJ Test Output Path\out\test\classes,它与标准的“测试”模块相同,并引起冲突问题。我希望它将输出路径保留为原本会使用的\out\testIntegration\classes

有什么方法可以指示IntelliJ正确选择这个新的测试源集并填写正确的输出路径?

1 个答案:

答案 0 :(得分:0)

如果您想在 kotlin gradle 构建脚本中使用自定义测试源集配置idea gradle 插件,您可以这样做:

val testIntegrationSrcDirName = "testIntegration"

sourceSets {
   ...
    
   create(testIntegrationSrcDirName) {
            compileClasspath += sourceSets.main.get().output + sourceSets.test.get().output // take also unit test source and resources
            runtimeClasspath += sourceSets.main.get().output + sourceSets.test.get().output // take also unit test source and resources
   }
}
    
...

idea {
    module {
        testSourceDirs = testSourceDirs + sourceSets[testIntegrationSrcDirName].allSource.srcDirs
    }
}

val testIntegrationImplementation: Configuration by configurations.getting {
    extendsFrom(configurations.implementation.get())
}
configurations["${testIntegrationSrcDirName}RuntimeOnly"].extendsFrom(configurations.runtimeOnly.get())
...