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

运行TestNG单元测试时出现NoSuchMethodError错误求助

TestNG运行单元测试报错java.lang.NoSuchMethodError的解决方法

问题详情

运行单元测试时抛出如下错误:

[TestNG] Running:
  C:\Users\skakani\AppData\Local\JetBrains\IdeaIC2022.2\temp-testng-customsuite.xml

java.lang.NoSuchMethodError: org.testng.ITestNGMethod.getConstructorOrMethod()Lorg/testng/internal/ConstructorOrMethod;
    at com.intellij.rt.testng.IDEATestNGRemoteListener$DelegatedResult.calculateDisplayName(IDEATestNGRemoteListener.java:379)
    at com.intellij.rt.testng.IDEATestNGRemoteListener$DelegatedResult.<init>(IDEATestNGRemoteListener.java:369)
    at com.intellij.rt.testng.IDEATestNGRemoteListener.createDelegated(IDEATestNGRemoteListener.java:354)
    at com.intellij.rt.testng.IDEATestNGRemoteListener.onTestFailure(IDEATestNGRemoteListener.java:112)
    at com.intellij.rt.testng.IDEATestNGTestListener.onTestFailure(IDEATestNGTestListener.java:27)
    at org.testng.internal.Invoker.runTestListeners(Invoker.java:1796)
    at org.testng.internal.Invoker.runTestListeners(Invoker.java:1780)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1230)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.runWorkers(TestRunner.java:1147)
    at org.testng.TestRunner.privateRun(TestRunner.java:749)
    at org.testng.TestRunner.run(TestRunner.java:600)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:317)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:312)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:274)
    at org.testng.SuiteRunner.run(SuiteRunner.java:223)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1039)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:964)
    at org.testng.TestNG.run(TestNG.java:900)
    at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
    at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)

Process finished with exit code -1

使用的TestNG suite配置文件temp-testng-customsuite.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
  <test thread-count="5" name="od">
    <classes>
      <class name="services.job.KafkaMessagesTest"/>
    </classes>
  </test> <!-- od -->
</suite> <!-- Default Suite -->

Maven中TestNG依赖配置:

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.0</version>
    <scope>compile</scope>
</dependency>

环境:Java 8、IntelliJ Community IDE 2022.2


问题分析

  1. 版本不兼容:TestNG 6.0版本过于老旧,org.testng.ITestNGMethod.getConstructorOrMethod()方法是TestNG后续版本新增的,而IntelliJ 2022.2内置的TestNG监听器会调用这个方法,导致找不到方法抛出NoSuchMethodError。
  2. 依赖scope错误:TestNG作为测试框架,依赖scope应设置为test,而非compile,否则会把测试依赖打包到主代码中,引发不必要的依赖冲突。

解决方案

  • 升级TestNG版本:将TestNG版本升级到7.5及以上(与IntelliJ 2022.2兼容的稳定版本),修改Maven依赖:
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.5</version>
    <scope>test</scope>
</dependency>
  • 刷新Maven依赖:在IntelliJ中点击Maven面板的「Reload All Maven Projects」按钮,确保新依赖被正确加载。
  • 清理IDE缓存:如果升级后依然报错,清理IDE缓存并重启:File -> Invalidate Caches... -> 勾选Clear file system cache and local history -> Invalidate and Restart

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:09:54