在基于 Spring Boot 的项目中运行 JUnit 测试时,有时会突然抛出 java.lang.NoSuchMethodError。这种错误往往让人摸不着头脑,因为它看起来像是方法不存在,但实际上代码逻辑并没有变动。
从堆栈信息来看,报错指向了 org.junit.platform.engine.discovery.MethodSelector.getMethodParameterTypes()。这说明当前运行时加载的 JUnit 平台库版本与测试运行器(Runner)所期望的版本不一致。简单来说,就是依赖冲突导致的方法签名不匹配。
排查这类问题的核心思路是统一依赖版本。对于使用 Spring Boot 脚手架的项目,最直接有效的方法是调整 parent 标签中的版本号。Spring Boot 官方维护的 starter-parent 通常会锁定一套兼容的 JUnit 版本组合。
尝试将父工程版本升级到较新的稳定版,例如 2.7.17:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.17</version>
<relativePath/>
</parent>
修改完成后,记得刷新 Maven 依赖。如果本地缓存有问题,可以执行 mvn clean install 强制更新。大多数情况下,依赖对齐后重启 IDE 就能解决问题。如果依然报错,建议通过 mvn dependency:tree 查看是否有其他第三方库引入了旧版本的 JUnit 平台包,并手动排除冲突。

