使用JUnit 5.8.1运行单元测试触发NoSuchMethodError异常如何处理
问题产生原因
该错误是JUnit 5各组件版本不兼容导致的:
JUnit 5.8.1版本的junit-jupiter-engine,依赖版本为1.8.1的junit-platform-commons,报错信息中缺失的findAnnotation三参数方法仅在1.8.1及以上版本的junit-platform-commons中存在。
当项目classpath中混入了低于1.8.1版本的junit-platform-commons(比如JUnit 5.7.2对应的1.7.2版本)时,运行时会优先加载低版本的类,找不到对应方法就会抛出NoSuchMethodError。
解决方案
统一管理JUnit 5依赖版本,推荐使用官方BOM来避免版本不一致问题:
Maven项目在pom.xml的dependencyManagement节点添加如下配置:<dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.8.1</version> <scope>import</scope> <type>pom</type> </dependency>后续所有JUnit Jupiter、JUnit Platform相关依赖无需单独声明版本号,会自动和BOM版本保持一致。
Gradle项目在
build.gradle的依赖配置中添加如下内容:dependencies { testImplementation platform('org.junit:junit-bom:5.8.1') }排查并排除低版本冲突依赖:
执行Maven命令mvn dependency:tree,或Gradle命令gradlew dependencies,搜索junit-platform-commons定位引入低版本的依赖,对该依赖添加排除规则移除低版本的junit-platform-commons即可。
内容的提问来源于stack exchange,提问作者Volodymyr
相关产品推荐
相关产品推荐

