You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Gradle Kotlin DSL添加集成测试?遇任务未找到问题

问题解决:Gradle中找不到integrationTest任务

你的问题核心是任务创建方式错误:你用tasks.named<Test>("integrationTest")尝试查找一个不存在的任务,但创建integrationTest sourceSet后,Gradle不会自动生成对应的Test任务,需要手动注册。

修正步骤

1. 替换任务查找为任务注册

把原来的named改为register,用来创建新的Test任务:

tasks {
    register<Test>("integrationTest") {
        description = "Runs Integration Tests"
        testClassesDirs = sourceSets["integrationTest"].output.classesDirs
        classpath = sourceSets["integrationTest"].runtimeClasspath
        // 可选:指定测试框架,比如JUnit Jupiter
        useJUnitPlatform()
    }
}

2. 给integrationTest sourceSet配置依赖

集成测试通常需要依赖主代码和测试库,给integrationTest sourceSet关联必要的依赖:

sourceSets {
    create("integrationTest") {
        java.srcDir("src/integration-test/kotlin")
        resources.srcDir("src/integration-test/resources")
        // 继承main代码的编译/运行时输出
        compileClasspath += sourceSets["main"].output
        runtimeClasspath += sourceSets["main"].output
        // 可选:继承test sourceSet的依赖(比如JUnit等)
        compileClasspath += sourceSets["test"].compileClasspath
        runtimeClasspath += sourceSets["test"].runtimeClasspath
    }
}

// 单独配置集成测试的依赖
dependencies {
    // ... 原有依赖 ...
    integrationTestImplementation(project(":common"))
    integrationTestImplementation(rootProject.libs.awssdk.lambda)
    integrationTestImplementation(libs.junit.pioneer)
}

3. 让check任务自动触发集成测试(可选)

如果希望执行./gradlew check时自动运行集成测试,添加依赖关联:

tasks.named("check") {
    dependsOn(tasks.named("integrationTest"))
}

完整修正后的Gradle代码

dependencies {
    implementation(project(":common"))
    implementation(rootProject.libs.awssdk.lambda)
    implementation(rootProject.libs.awssdk.kinesis)
    implementation(rootProject.libs.awssdk.dynamodb)
    implementation(rootProject.libs.lambda.events)
    implementation(libs.awssdk.client)
    testImplementation(libs.junit.pioneer)

    // 集成测试专属依赖
    integrationTestImplementation(project(":common"))
    integrationTestImplementation(rootProject.libs.awssdk.lambda)
    integrationTestImplementation(rootProject.libs.awssdk.kinesis)
    integrationTestImplementation(rootProject.libs.awssdk.dynamodb)
    integrationTestImplementation(rootProject.libs.lambda.events)
    integrationTestImplementation(libs.awssdk.client)
    integrationTestImplementation(libs.junit.pioneer)
}

sourceSets {
    create("integrationTest") {
        java.srcDir("src/integration-test/kotlin")
        resources.srcDir("src/integration-test/resources")
        // 关联主代码和测试代码的依赖链
        compileClasspath += sourceSets["main"].output + sourceSets["test"].compileClasspath
        runtimeClasspath += sourceSets["main"].output + sourceSets["test"].runtimeClasspath
    }
}

tasks {
    register<Test>("integrationTest") {
        description = "Runs Integration Tests"
        testClassesDirs = sourceSets["integrationTest"].output.classesDirs
        classpath = sourceSets["integrationTest"].runtimeClasspath
        useJUnitPlatform()
    }

    // 让check任务包含集成测试环节
    named("check") {
        dependsOn(integrationTest)
    }
}

tasks.withType<Jar>() {
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    configurations["compileClasspath"].forEach { file: File ->
        from(zipTree(file.absoluteFile))
    }
}

现在执行./gradlew integrationTest就能正常运行集成测试了。

内容的提问来源于stack exchange,提问作者CyberPunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:39:53