【问题标题】:Adding integration tests to Kotlin project using the Kotlin Gradle DSL使用 Kotlin Gradle DSL 向 Kotlin 项目添加集成测试
【发布时间】:2019-02-04 01:42:01
【问题描述】:

我想向包含集成测试的 Kotlin 项目添加额外的“源代码集”。我看到一些帖子谈到了为普通 Java 项目或 Kotlin 使用 Groovy 而不是 Kotlin Gradle DSL。

总之,使用 Kotlin Gradle DSL:

  • 如何添加可包含 Kotlin 代码、Java 代码和资源的附加“源集”,以便将集成测试与常规单元测试分开?
  • 如何添加额外的任务和配置以独立于单元测试运行集成测试?

我希望目录结构类似于:

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

相关:

谢谢

【问题讨论】:

标签: java gradle kotlin gradle-kotlin-dsl


【解决方案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")

【讨论】:

    【解决方案2】:

    您必须将以下配置添加到您的 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

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多