簡體   English   中英

使用 Kotlin Gradle DSL 向 Kotlin 項目添加集成測試

[英]Adding integration tests to Kotlin project using the Kotlin Gradle DSL

我想向包含集成測試的 Kotlin 項目添加一個額外的“源集”。 我看過一些帖子,他們談論為 vanilla Java 項目或 Kotlin 做這件事,但使用 Groovy 而不是 Kotlin Gradle DSL。

總之,使用 Kotlin Gradle DSL:

  • 如何添加一個額外的“源集”,它可以包含 Kotlin 代碼、Java 代碼和資源,以便將集成測試與常規單元測試分開?
  • 如何添加額外的任務和配置以將集成測試與單元測試分開運行?

我希望目錄結構看起來像:

src
   main
      java
      kotlin
      resources
   test
      java
      kotlin
      resources
   integration
      java
      kotlin
      resources

有關的:

謝謝

首先,創建源集和配置:

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

您必須將以下配置添加到 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()
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM