问题介绍

在使用 IDEA 运行 Junit 测试用例的时候,控制台报了!!! JUnit version 3.8 or later expected错误,完整报错信息如下:

!!! JUnit version 3.8 or later expected:java.lang.ClassNotFoundException: junit.framework.ComparisonFailureat java.net.URLClassLoader.findClass(URLClassLoader.java:382)at java.lang.ClassLoader.loadClass(ClassLoader.java:418)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)at java.lang.ClassLoader.loadClass(ClassLoader.java:351)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at com.intellij.rt.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:209)at com.intellij.rt.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:195)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:49)

我的测试代码

import org.junit.jupiter.api.Test;public class StronglyReferenceTest {@Testpublic void test() {System.out.println("hello");}}

问题排查

看到ClassNotFoundException第一反应就是包冲突,所以先排查项目的依赖,看是否有依赖冲突。查看了pom文件,项目关于junit的依赖只有:

<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.7.1</version><scope>test</scope>
</dependency>

显然这并不会导致包冲突,而且当我使用mvn clean test命令去执行测试用例的时候,测试用例能正常执行

$ mvn clean test
...[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.736 s
[INFO] Finished at: 2021-03-13T21:01:28+08:00
[INFO] Final Memory: 14M/68M
[INFO] ------------------------------------------------------------------------

这就更加证明了项目代码本身没什么问题,该报错有可能是 IDEA 的 bug,所以去 google 看有没有人遇到相关的问题,查找了一番后,发现遇到该问题的人还不少

搜索到的网站基本都被我浏览了一遍,后面找到一个帖子,这位作者虽然跟我一样的报错,但他是在运行main方法的时候报的错,并不是运行junit测试方法时报的,原文链接为:https://intellij-support.jetbrains.com/hc/en-us/community/posts/360003450980-JUnit-version-3-8-or-later-expected?page=2#comments

他产生该问题的原因是类名使用了Test结尾,而以Test结尾的类,IDEA 会将其识别为 junit 测试类去运行(这是IDEA的bug,不过我用的版本已经修复了)。解决方案就是类名去掉Test后缀

上面的解决方案给了我一点启发,会不会我的错误也是类名问题呢?于是我也去掉Test后缀,即将StronglyReferenceTest改为StronglyReferenc后再次执行测试方法,发现问题解决了,测试方法执行正常

但我的类本来就是一个 junit 测试类啊,为什么以Test结尾也会报错呢?而且我之前的其他项目,类名也是以Test结尾的,也能正常运行

后来发现原来是我之前在src/main/java下也创建了一个StronglyReferenceTest

src/main/java文件夹下有与src/test/java文件夹下相同名字的类时,执行该类的测试方法就会报错,解决方案就是尽量避免相同名称的类出现(实际上项目中一般不会出现这种问题)

结论

src 下的类,最好不要以Test结尾,这样做并不规范,而且容易导致编辑器的误解,以为该类是测试类,从而导致意想不到的错误

我也向 IDEA 上报了该问题,等待 IDEA 的回复,感兴趣的同学可以点击该链接围观:https://youtrack.jetbrains.com/issue/IDEA-264240

最后,如果该文章对你有帮助的话,可以在微信搜索huangxy关注我的公众号,也可以扫下方二维码进行关注

IDEA 运行 Junit 测试用例报 !!! JUnit version 3.8 or later expected 错误相关推荐

  1. java可以运行奥android报错,添加java8支持时Android studio错误

    我的Android Studio或配置有什么问题? Error:(22, 0) Could not find method jackOptions() for arguments [build_1b0 ...

  2. JUnit测试用例– Eclipse和Maven

    JUnit Test Cases are normal java class with methods to be executed by JUnit framework. JUnit 5 is a ...

  3. JUnit version 3.8 or later expected

    !!! JUnit version 3.8 or later expected: java.lang.ClassNotFoundException: junit.framework.Compariso ...

  4. ant脚步执行JUnit测试用例

    除了使用java来直接运行junit之外,我们还可以使用ant脚本,结合脚本执行junit用例,并生成测试报告,在进行每日构建等动作时非常有用. 一个完整的例子: <?xml version=& ...

  5. Maven依赖junit @Test报错

    <dependency><groupId>junit</groupId><artifactId>junit</artifactId>< ...

  6. Junit单元测试报错Class not found可能原因

    Junit单元测试报错Class not found可能原因 1.将maven的后台运行关闭 2.Test方法中的语法错误

  7. 彻底解决IDEA执行junit测试用例时报Command line is too long错误

    我想很多同学都遇到过这样的烦恼,那就是在运行Junit单元测试用例的时候,idea提示command line is too long,见下图: 然后点击上图箭头所指向的地方,idea会弹出一个对话框 ...

  8. parasoft Jtest 使用教程:生成、执行和扩展Junit测试用例

    parasoft Jtest介绍和试用>>> Jtest能自动的生成和执行用来捕捉运行时异常的JUnit测试用例以及尽可能完整的运用方法.你能扩展这些自动生成的测试用例来提高测试覆盖 ...

  9. java 计算器 junit测试_Java Junit测试

    使用junit做测试目的是尽量早的发现程序的bug,一个bug隐藏的时间越久,修复他的代价就越大. 1.Junit简介: Junit最初是由Erich Gamma 和 Kent Beck 编写的一个回 ...

最新文章

  1. shell中的数值判断
  2. 为什么Github上的开发者比iOS上的要更值钱?
  3. 文巾解题 1480. 一维数组的动态和
  4. js弹性运动滑动的菜单
  5. 在csdn上如何快速转载博客
  6. Spring Boot使用redis处理重复点赞的问题
  7. matlab计算斜方差_计算一幅图像的信噪比
  8. 小米折叠屏手机设计专利曝光:向内折叠 正面无开孔
  9. DataBseDesign工作笔记004---PowerDesigner导入sql脚本生成物理模型
  10. 单链表的插入和遍历 包括头插入和尾插入
  11. [ 总结 ] 删除通过find查找到的文件
  12. 面试官:谈谈 Tomcat 架构及启动过程,我一脸懵逼。。
  13. linux系统下,traceroute路由跟踪指令详解
  14. 科密t1消费管理系统_科密A1\T1登录密码获取软件-科密A1\T1登录密码获取工具1.0.0 安卓版-东坡下载...
  15. python一只青蛙一次可以_Python算法题(一)——青蛙跳台阶
  16. VI设计创意的方法与技巧
  17. c语言航标知识点,书摘:迷惘时的航标——“人生哲学”
  18. vue实现数字翻页动画
  19. Python语言程序设计基础_实验2 基本数据类型和运算_答案_通识教育必修课程_上海师范大学
  20. 基于黑寡妇优化算法的函数优化算法

热门文章

  1. 51nod 1718 Cos的多项式 【数学】
  2. 虚拟仿真 人人开发(二)
  3. ExtJS中Grid分页
  4. lcd屏和amoled屏的优缺点 lcd屏和amoled屏哪个效果好
  5. amoled和super amoled哪个更伤眼 amoled和super amoled的显示效果
  6. CRM客户关系管理系统源码跟单销售公司订单跟进客户公海合同管理办公erp客户管理(小程序+APP+H5)
  7. jam 掘金study_召唤队友 ing!机器学习 Study Jam 第二季课程现已开放
  8. c语言镶嵌循环,讲解C++的do while循环和循环语句的嵌套使用方法
  9. 统一门户系统解决方案,协同办公更敏捷
  10. 运维(21) 制作WinPE启动U盘