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

Karate JUnit5测试IDEA运行正常但Maven命令行无测试执行

问题根因
  • 测试执行引擎冲突:pom中同时引入JUnit 5(karate-junit5传递依赖)和TestNG 7.4.0,maven-surefire-plugin 2.22.2检测到TestNG存在时会默认使用TestNG执行器,完全不识别JUnit 5的@Test注解。IDEA会自动根据类上的注解匹配执行器,所以IDE内运行正常,命令行执行时引擎选错,自然扫不到用例。另外TestNG默认只识别public修饰的测试类和方法,你的ExamplesTest是包访问权限,就算类里写了TestNG注解也扫不到。
  • Karate依赖版本混乱:karate-junit5用1.0.1版本,karate-apache却用0.9.6跨大版本旧包,还错误声明了<type>pom</type>,会导致核心类加载冲突、特征文件路径扫描逻辑异常。
  • 扫描规则错位:执行日志显示运行的是automation.tests.uiTests.UsersRunner而非你指定的ExamplesTest,就是因为TestNG执行器扫到了名字带Runner的类,但类里没有可识别的测试方法,直接返回0用例结果。
  • pom存在无效占位符:artifactId标签里的<ProjectName>未替换为实际值,可能导致maven构建时资源解析异常。
修复方案

按以下顺序修改配置:

  1. 移除TestNG依赖
    如果没有同时使用TestNG写用例的需求,直接删除pom中testng的依赖块:
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.4.0</version>
    <scope>test</scope>
</dependency>

如果必须保留TestNG,需要在surefire插件中显式配置同时支持两种引擎,无特殊需求直接删除是最稳妥的方案。
2. 统一Karate依赖版本
将karate-apache版本和karate-junit5对齐,删除错误的pom类型声明:

<dependency>
    <groupId>com.intuit.karate</groupId>
    <artifactId>karate-apache</artifactId>
    <version>${karate.version}</version>
</dependency>
  1. 修正maven-surefire-plugin配置
    显式指定JUnit5为执行引擎,补全测试类扫描规则,避免自动识别出错:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven.surefire.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.8.2</version>
        </dependency>
    </dependencies>
    <configuration>
        <argLine>-Dfile.encoding=UTF-8</argLine>
        <includes>
            <include>**/*Test.java</include>
        </includes>
    </configuration>
</plugin>
  1. 修正pom基础配置
    将artifactId标签里的<ProjectName>占位符替换为实际项目名称,比如<artifactId>karate-automation</artifactId>。
  2. 清缓存重跑
    执行命令前先清理旧构建产物,先不要加-DfailIfNoTests=false参数,这个参数会掩盖测试扫描失败的真实错误,直接执行:
mvn clean test -Dtest=ExamplesTest
验证结果

命令执行后控制台会正常输出Karate的特征文件加载日志,显示扫描到的.feature文件数量、并行执行线程数,最终统计的测试用例数和你写的特征文件场景数一致,不会再出现Tests run: 0的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:06:23