gpt4 book ai didi

gradle - 使用 Gradle Kotlin DSL 进行集成测试

转载 作者:IT老高 更新时间:2023-10-28 13:42:03 25 4
gpt4 key购买 nike

我正在使用 this blog post为 Spring Boot 项目配置集成测试,但我非常坚持声明源集。我还找到了this post on StackOverflow ,但我想我已经走得更远了。

我的项目结构是

project
|_ src
|_ main
| |_ kotlin
| |_ resources
|_ testIntegration
| |_ kotlin
| |_ resources
|_ test
| |_ kotlin
| |_ resources
|_ build.gradle.kts
|_ ... other files

还有build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
idea
kotlin("jvm")
id("org.springframework.boot") version "2.0.5.RELEASE"
id("org.jetbrains.kotlin.plugin.spring") version "1.2.71"
}

fun DependencyHandlerScope.springBoot(module: String) = this.compile("org.springframework.boot:spring-boot-$module:2.0.5.RELEASE")
fun DependencyHandlerScope.springBootStarter(module: String) = this.springBoot("starter-$module")

dependencies {
springBoot("devtools")

springBootStarter("batch")
springBootStarter("... spring boot dependencies")


compile("... more dependencies")

testCompile("... more test dependencies")
}

val test by tasks.getting(Test::class) {
useJUnitPlatform { }
}

kotlin {
sourceSets {
val integrationTest by creating {
kotlin.srcDir("src/testIntegration/kotlin")
resources.srcDir("src/testIntegration/resources")
}
}
}

val integrationTestCompile by configurations.creating {
extendsFrom(configurations["testCompile"])
}
val integrationTestRuntime by configurations.creating {
extendsFrom(configurations["testRuntime"])
}

val testIntegration by tasks.creating(Test::class) {
group = "verification"
testClassesDirs = kotlin.sourceSets["integrationTest"].kotlin
}

idea {
module {
testSourceDirs.addAll(kotlin.sourceSets["integrationTest"].kotlin.srcDirs)
testSourceDirs.addAll(kotlin.sourceSets["integrationTest"].resources.srcDirs)
}
}

我认为我的方向非常正确。至少它不再抛出异常:)

当我运行 testIntegration 任务时,我得到以下输出:

Testing started at 12:08 ...
12:08:49: Executing task 'testIntegration'...

> Task :project:compileKotlin UP-TO-DATE
> Task :project:compileJava NO-SOURCE
> Task :project:processResources UP-TO-DATE
> Task :project:classes UP-TO-DATE
> Task :project:compileTestKotlin UP-TO-DATE
> Task :project:compileTestJava NO-SOURCE
> Task :project:processTestResources UP-TO-DATE
> Task :project:testClasses UP-TO-DATE
> Task :project:testIntegration
BUILD SUCCESSFUL in 2s
5 actionable tasks: 1 executed, 4 up-to-date
12:08:51: Task execution finished 'testIntegration'.

此外,IntelliJ 不会将 testIntegration 目录识别为 Kotlin 包。

最佳答案

多亏了 Kotlin Slack channel 上的一些帮助,我终于弄明白了。首先,我必须升级到 Gradle 版本 4.10.2。

有关更多信息,请查看 Gradle 的这两个页面:

然后我只需要为 integrationTests 创建 sourceSets

sourceSets {
create("integrationTest") {
kotlin.srcDir("src/integrationTest/kotlin")
resources.srcDir("src/integrationTest/resources")
compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
runtimeClasspath += output + compileClasspath + sourceSets["test"].runtimeClasspath
}
}

这适用于 Java,但由于我使用的是 Kotlin,因此我不得不添加一个额外的 withConvention 包装器

sourceSets {
create("integrationTest") {
withConvention(KotlinSourceSet::class) {
kotlin.srcDir("src/integrationTest/kotlin")
resources.srcDir("src/integrationTest/resources")
compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
runtimeClasspath += output + compileClasspath + sourceSets["test"].runtimeClasspath
}
}
}

在文档中他们只放了 runtimeClasspath += output + compileClasspath,但我添加了 sourceSets["test"].runtimeClasspath 所以我可以直接使用测试依赖项为 integrationTest 任务声明新的依赖关系。

一旦创建了 sourceSet,就需要声明一个新任务

task<Test>("integrationTest") {
description = "Runs the integration tests"
group = "verification"
testClassesDirs = sourceSets["integrationTest"].output.classesDirs
classpath = sourceSets["integrationTest"].runtimeClasspath
mustRunAfter(tasks["test"])
}

在此之后测试仍然没有运行,但那是因为我使用的是 JUnit4。所以我只需要添加 useJUnitPlatform() 这使它成为最终代码

task<Test>("integrationTest") {
description = "Runs the integration tests"
group = "verification"
testClassesDirs = sourceSets["integrationTest"].output.classesDirs
classpath = sourceSets["integrationTest"].runtimeClasspath
mustRunAfter(tasks["test"])
useJUnitPlatform()
}

关于gradle - 使用 Gradle Kotlin DSL 进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com