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

Java 9+、Cucumber与JUnit5在非Spring应用中的执行问题排查

Maven+JUnit5+Cucumber+JDK18模块集成测试执行失败(测试数为0)

问题背景

查阅Cucumber文档并大量搜索资料后,仍在Maven、Java、JUnit5、Cucumber及Java模块集成(基于JDK18)的问题上受阻。现有一个简单Java桌面应用,尝试通过Maven借助Surefire插件执行Cucumber的feature测试,Java模块无“非法访问”错误,但测试始终无法执行。

执行现象

运行mvn test后,Surefire输出显示无测试执行:

--- maven-surefire-plugin:3.0.0-M7:test (default-test) @ usecasetdd ---
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO]

现有配置

1. Cucumber引导类

package com.demodemo.core.tests;

//...

@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("com/demodemo/core/tests/features")
@ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "com.demodemo.core.tests")
class GameBDDTests {
}

2. 项目结构

Project work tree structure


解决方法

1. 修改引导类访问权限

默认包访问权限的测试类可能无法被JUnit 5扫描识别,将GameBDDTests改为public:

public class GameBDDTests {
}

2. 升级Surefire插件版本

3.0.0-M7为旧版测试插件,升级至稳定版(如3.2.5)确保兼容性:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.5</version>
</plugin>

3. 统一Cucumber依赖版本

确保cucumber-junit-platform-engine、cucumber-java等依赖版本一致,且适配JUnit 5版本(示例使用Cucumber 7.x):

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>7.15.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit-platform-engine</artifactId>
    <version>7.15.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite</artifactId>
    <version>1.10.0</version>
    <scope>test</scope>
</dependency>

4. 验证feature文件配置

确认feature文件扩展名为.feature,且文件内包含合法的Cucumber语法(如Scenario定义),同时@SelectClasspathResource路径与实际资源路径完全匹配。

5. 完善模块描述符配置

模块化项目需在module-info.java中声明依赖并开放测试包权限:

module com.demodemo.core {
    requires io.cucumber.java;
    requires io.cucumber.junit.platform.engine;
    requires org.junit.platform.suite.api;
    requires org.junit.jupiter.api;

    opens com.demodemo.core.tests to io.cucumber.java, org.junit.platform.commons;
}

6. 指定测试类执行排查

通过命令直接指定测试类,验证是否能被识别:

mvn test -Dtest=GameBDDTests

若执行成功,需在Surefire插件中明确测试类匹配规则:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.5</version>
    <configuration>
        <includes>
            <include>**/*Tests.java</include>
        </includes>
    </configuration>
</plugin>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:06:37