如何为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
相关产品推荐
相关产品推荐

