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

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类与项目结构修正

  1. 移除JUnit 4风格Runner:不要使用@RunWith(Cucumber.class),改用JUnit 5平台的上下文绑定方式。
  2. 添加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 {
}
  1. 规范项目结构:确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:22:34