我向 IDEA 提交了一个 BUG

问题介绍

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

!!! JUnit version 3.8 or later expected:

java.lang.ClassNotFoundException: junit.framework.ComparisonFailure
 at 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 {

    @Test
    public 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>

而且也没有其他包依赖了junit,显然这并不是包冲突的问题,而且当我使用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] ------------------------------------------------------------------------

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


搜索到的网站基本都被我浏览了一遍,后面找到一个帖子,这位作者虽然跟我一样的报错,但他是在运行main方法的时候报的错,并不是运行junit测试方法时报的

我向 IDEA 提交了一个 BUG

原文链接为:https://discuss.kotlinlang.org/t/have-a-error-junit-version-3-8-or-later-expected/2558/9

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

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

但我的类本来就是一个junit测试类啊,为什么以Test结尾也会报错呢?而且我之前的其他项目,类名也是以Test结尾的,也能正常运行 后来发现原来是我之前在src/main/java下也创建了一个StronglyReferenceTest

我向 IDEA 提交了一个 BUG

src/main/java文件夹下有与src/test/java文件夹下相同名字的类时

反馈问题

由于我使用的IDEA版本是IntelliJ IDEA 2019.3.5 (Ultimate Edition),不确定后面的版本是否修复该问题,所以就直接去IDEA官网上提交了一个issue

我向 IDEA 提交了一个 BUG

在经过两天的等待后,IDEA相关人员也对我提的bug进行回复,说是在2021.1发布的EAP版本测试过,已经修复了该问题

我向 IDEA 提交了一个 BUG

最后如果有遇到该问题的同学,可以将IDEA版本升级到最新版解决该问题

原文始发于微信公众号(huangxy):我向 IDEA 提交了一个 BUG

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/160117.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!