问题描述
Exception in thread "main" java.lang.NoSuchMethodError: 'java.lang.String org.junit.platform.engine.discovery.MethodSelector.getMethodParameterTypes()' at com.intellij.junit5.JUnit5TestRunnerUtil.loadMethodByReflection(JUnit5TestRunnerUtil.java:127) at com.intellij.junit5.JUnit5TestRunnerUtil.buildRequest(JUnit5TestRunnerUtil.java:102) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:43) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
原因分析
这个 java.lang.NoSuchMethodError 错误表明在运行时,JVM 尝试调用 org.junit.platform.engine.discovery.MethodSelector.getMethodParameterTypes() 方法,但当前加载的 MethodSelector 类版本中并没有这个方法。这通常是由于 JUnit 平台库的不同版本之间存在不兼容 所致。
解决方案
可在 pom.xml 文件中修改 parent 的版本号,将其调整为兼容的版本:
<parent>
<groupId>org.springframework.boot
spring-boot-starter-parent
2.7.17

