【问题标题】: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