使用Kotlin Gradle DSL将集成测试添加到Kotlin项目中

11
我想为一个Kotlin项目添加一个额外的"source set",其中包含集成测试。我看过一些帖子,它们讨论了如何为普通Java项目或使用Groovy而不是Kotlin Gradle DSL的Kotlin项目完成这项工作。
总之,使用Kotlin Gradle DSL: - 如何添加一个额外的“source set”,该set可以包含Kotlin代码、Java代码和资源,目的是将集成测试与常规单元测试分开? - 如何添加一个额外的任务和配置,以便单独运行集成测试而不是单元测试?
我希望目录结构看起来像这样:
src
   main
      java
      kotlin
      resources
   test
      java
      kotlin
      resources
   integration
      java
      kotlin
      resources

相关内容:

谢谢


2
我刚刚创建了一个与你相关的问题。我还能够弄清楚如何让它工作。https://dev59.com/WVQJ5IYBdhLWcg3w35-R#52906232 - Johan Vergeer
2个回答

1
首先,创建源集和配置:
sourceSets {
    create("intTest") {
        compileClasspath += sourceSets.main.get().output
        runtimeClasspath += sourceSets.main.get().output
    }
}

val intTestImplementation: Configuration by configurations.getting {
    extendsFrom(configurations.implementation.get())
}

val intTestRuntimeOnly: Configuration by configurations.getting {
    extendsFrom(configurations.runtimeOnly.get())
}

然后,创建任务来运行它们:
val integrationTest = task<Test>("integrationTest") {
    description = "Runs integration tests"
    group = "verification"

    testClassesDirs = sourceSets["intTest"].output.classesDirs
    classpath = sourceSets["intTest"].runtimeClasspath
    shouldRunAfter("test")
}

您可以为新的源集添加依赖项。例如:

intTestImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
intTestRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junitVersion")

-1

你必须在你的 build.gradle 文件中添加以下配置

configurations {
    integrationTestImplementation.extendsFrom implementation
    integrationTestRuntimeOnly.extendsFrom runtimeOnly
}


dependencies {
    intTestImplementation 'junit:junit:4.12'
    ...
}

sourceSets {
    integrationTest {
        kotlin {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integrationTest/kotlin')
        }
    }
}

task integrationTest(type: Test, dependsOn: []) {
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
    useJUnitPlatform()
}

source: https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接