使用Kotlin Gradle DSL向Kotlin项目添加集成测试

时间:2018-08-29 09:53:11

标签: java gradle kotlin gradle-kotlin-dsl

我想向将包含集成测试的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

相关:

谢谢

2 个答案:

答案 0 :(得分:0)

您必须在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

答案 1 :(得分:0)

首先,创建源集和配置:

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")
相关问题