运行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
问题分析
- 版本不兼容:TestNG 6.0版本过于老旧,
org.testng.ITestNGMethod.getConstructorOrMethod()方法是TestNG后续版本新增的,而IntelliJ 2022.2内置的TestNG监听器会调用这个方法,导致找不到方法抛出NoSuchMethodError。 - 依赖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
相关产品推荐
相关产品推荐

