Spring Boot 3 + JUnit 5 + Cucumber:JUnit Runner无法识别Cucumber测试
解决方案:JUnit 5 + Cucumber 7 + Spring Boot 3 集成测试适配
一、Gradle 依赖配置修正
确保你的依赖配置正确绑定Cucumber与JUnit平台,同时避免版本冲突:
Groovy 版本(build.gradle)
plugins { id 'java' id 'org.springframework.boot' version '3.4.3' id 'io.spring.dependency-management' version '1.1.6' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '23' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' // Cucumber核心与Spring集成依赖 testImplementation 'io.cucumber:cucumber-java:7.20.1' testImplementation 'io.cucumber:cucumber-spring:7.20.1' // Cucumber与JUnit 5平台绑定核心依赖 testImplementation 'io.cucumber:cucumber-junit-platform-engine:7.20.1' // Spring Boot测试基础依赖 testImplementation 'org.springframework.boot:spring-boot-starter-test' // 引入JUnit平台启动器,确保测试可被发现 testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() // 可选:指定扫描Cucumber相关测试的路径,避免与普通JUnit测试混淆 include('**/cucumber/**/*', '**/*Cucumber*') }
Kotlin 版本(build.gradle.kts)
plugins { java id("org.springframework.boot") version "3.4.3" id("io.spring.dependency-management") version "1.1.6" } group = "com.example" version = "0.0.1-SNAPSHOT" java { sourceCompatibility = JavaVersion.VERSION_23 } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter") testImplementation("io.cucumber:cucumber-java:7.20.1") testImplementation("io.cucumber:cucumber-spring:7.20.1") testImplementation("io.cucumber:cucumber-junit-platform-engine:7.20.1") testImplementation("org.springframework.boot:spring-boot-starter-test") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } tasks.test { useJUnitPlatform() include("**/cucumber/**/*", "**/*Cucumber*") }
二、Runner类与项目结构修正
- 移除JUnit 4风格Runner:不要使用
@RunWith(Cucumber.class),改用JUnit 5平台的上下文绑定方式。 - 添加Cucumber-Spring配置类:创建类绑定Spring Boot上下文,让Cucumber测试能加载Spring环境:
package com.example.demo.cucumber; import org.springframework.boot.test.context.SpringBootTest; import io.cucumber.spring.CucumberContextConfiguration; @CucumberContextConfiguration @SpringBootTest(classes = DemoApplication.class) public class CucumberSpringConfig { }
- 规范项目结构:确保feature文件与step定义的路径对应:
src/test/java └── com/example/demo ├── cucumber │ ├── CucumberSpringConfig.java │ └── stepdefs │ └── DemoStepDefinitions.java src/test/resources └── com/example/demo └── cucumber └── demo.feature
三、测试执行与验证
- 执行
./gradlew test,Gradle会通过JUnit平台自动识别并运行Cucumber测试。 - 如需单独运行Cucumber测试,执行
./gradlew test --tests "*Cucumber*"
四、常见问题排查
- 依赖冲突:运行
./gradlew dependencies检查是否存在JUnit 4或低版本Cucumber依赖,通过exclude语句排除。 - feature文件路径错误:如果feature文件未被识别,可在step定义类上添加
@CucumberOptions(features = "classpath:cucumber/")指定路径。 - JDK版本匹配:确认Gradle使用的JDK版本为Java 23,可通过
./gradlew -v查看。
内容的提问来源于stack exchange,提问作者Seshen
相关产品推荐
相关产品推荐

