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

添加spring-kafka-test后Gradle Test Executor执行失败排查

Spring Boot 3.0添加spring-kafka-test后测试启动失败问题排查

问题现象

添加spring-kafka-test依赖后,测试启动失败,抛出如下异常:

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException
根源:java.lang.NoClassDefFoundError: org/junit/platform/launcher/TestExecutionListener

当前项目的Gradle配置如下:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.springframework.boot.gradle.tasks.bundling.BootJar

plugins {
    id("org.springframework.boot") version "3.0.0"
    id("io.spring.dependency-management") version "1.1.0"
    kotlin("jvm") version "1.7.22"
    kotlin("plugin.spring") version "1.7.22"
    `maven-publish`
    `java-test-fixtures`
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

repositories {
    mavenCentral()
}

dependencies {
    api("org.jetbrains.kotlin:kotlin-reflect")
    api("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    api("com.auth0:java-jwt:4.2.1")
    api("com.fasterxml.jackson.module:jackson-module-kotlin")
    api("io.github.microutils:kotlin-logging-jvm:3.0.4")

    api("org.springframework.boot:spring-boot-starter")
    api("org.springframework.boot:spring-boot-starter-actuator")
    api("org.springframework.boot:spring-boot-starter-data-mongodb")
    api("org.springframework.boot:spring-boot-starter-validation")
    api("org.springframework.boot:spring-boot-starter-security")
    api("org.springframework.boot:spring-boot-starter-web")
    api("org.springframework.kafka:spring-kafka")

    testFixturesApi("org.springframework.boot:spring-boot-starter-test")
    testFixturesApi("org.springframework.restdocs:spring-restdocs-mockmvc")
    testFixturesApi("org.springframework.security:spring-security-test")
    testFixturesApi("org.springframework.kafka:spring-kafka-test")
}

publishing {
    publications {
        create<MavenPublication>("maven") {
            groupId = project.group.toString()
            artifactId = project.name
            version = project.version.toString()

            from(components["java"])
        }
    }
}

tasks.getByName<BootJar>("bootJar") {
    enabled = false
}

tasks.getByName<Jar>("jar") {
    enabled = true
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "17"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

问题原因

  1. 依赖作用域配置错误:testFixturesApi是用于配置**测试夹具(test fixtures)**的依赖,它仅对模块内的测试夹具代码可见,不会自动将依赖传递到普通test任务的类路径中。而spring-kafka-test运行时需要的JUnit Platform Launcher相关类,必须存在于测试任务的类路径才能正常启动测试。
  2. Spring Boot 3.0依赖版本变化:Spring Boot 3.0对应的JUnit Platform版本升级后,TestExecutionListener所在的junit-platform-launcher组件被单独拆分,spring-kafka-test依赖该组件但未被正确引入到测试类路径。

修复方案

调整spring-kafka-test的依赖配置,将其添加到testImplementation作用域(如果仅用于普通测试),或者同时保留testFixturesApi并补充junit-platform-launcher依赖:

方案1:仅普通测试使用spring-kafka-test

修改dependencies块中的对应行:

testFixturesApi("org.springframework.boot:spring-boot-starter-test")
testFixturesApi("org.springframework.restdocs:spring-restdocs-mockmvc")
testFixturesApi("org.springframework.security:spring-security-test")
// 移到testImplementation,确保测试任务类路径包含该依赖
testImplementation("org.springframework.kafka:spring-kafka-test")

方案2:测试夹具和普通测试都需要

如果测试夹具代码也要用到spring-kafka-test,可以同时配置两个作用域:

testFixturesApi("org.springframework.boot:spring-boot-starter-test")
testFixturesApi("org.springframework.restdocs:spring-restdocs-mockmvc")
testFixturesApi("org.springframework.security:spring-security-test")
testFixturesApi("org.springframework.kafka:spring-kafka-test")
// 补充JUnit Platform Launcher到测试类路径
testImplementation("org.junit.platform:junit-platform-launcher")

修改后重新执行测试任务,即可解决类找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:10:29