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

使用maven-surefire运行testng.xml时fork进程出现依赖方法无@Test错误

问题触发原因
    1. Maven Surefire插件配置作用域错误:你当前把<suiteXmlFiles>等配置写在了自定义的<execution>节点内,没有覆盖Surefire插件默认的test goal执行逻辑。默认情况下Surefire会自动扫描所有符合命名规则的测试类(默认匹配**/Test*.java、/*Test.java、/*Tests.java、**/*TestCase.java),哪怕你自定义的execution指定了testng.xml,默认的execution还是会触发全量测试类扫描,所以检测到了不在你配置文件内的AdjustmentLogReportTests类的依赖异常。
    1. 多测试框架扫描冲突:你的项目同时引入了JUnit和TestNG依赖,Surefire会自动检测并启用两种测试框架的扫描逻辑,额外触发了全量测试类的注解、依赖校验流程。
    1. TestNG版本兼容缺陷:你使用的TestNG 6.9.8是2015年的老旧版本,和3.0.0-M5版本的Surefire插件存在兼容问题,旧版本TestNG在运行前会全量扫描类路径下所有带@Test注解的方法并校验依赖关系,不会仅局限于suiteXmlFiles指定的测试范围。
解决方法
    1. 调整Surefire插件配置作用域:把<configuration>节点从<execution>内部移到<plugin>的直接子节点下,覆盖默认的test goal配置,避免默认执行逻辑触发全量扫描,也可以显式指定仅使用TestNG运行器避免JUnit扫描干扰,修改后的配置示例:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M5</version>
    <configuration>
        <skip>false</skip>
        <forkCount>2</forkCount>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
        <maven.test.failure.ignore>false</maven.test.failure.ignore>
        <rerunFailingTestsCount>2</rerunFailingTestsCount>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
        <!-- 显式指定TestNG运行器 -->
        <provider>org.apache.maven.surefire:surefire-testng</provider>
    </configuration>
</plugin>
    1. 升级TestNG版本:将TestNG升级到7.5+的稳定版本,修复旧版本全量扫描测试类的兼容问题,新版本会严格按照suiteXmlFiles指定的范围加载测试类,不会扫描未配置的测试类:
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.7.1</version>
    <scope>test</scope>
</dependency>
    1. (可选)如果项目不需要同时运行JUnit测试,可以直接移除JUnit依赖,避免多测试框架的扫描冲突。
    1. 临时验证方案:执行测试命令时加上-Dtest=PracticeArtLookupTest参数,强制指定仅运行目标测试类,快速验证配置是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:48:04