IDEA 运行 Junit 测试用例报 !!! JUnit version 3.8 or later expected 错误
問題介紹
在使用 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命令去執(zhí)行測試用例的時候,測試用例能正常執(zhí)行
$ 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 看有沒有人遇到相關的問題,查找了一番后,發(fā)現(xiàn)遇到該問題的人還不少
搜索到的網(wǎng)站基本都被我瀏覽了一遍,后面找到一個帖子,這位作者雖然跟我一樣的報錯,但他是在運行main方法的時候報的錯,并不是運行junit測試方法時報的,原文鏈接為:https://intellij-support.jetbrains.com/hc/en-us/community/posts/360003450980-JUnit-version-3-8-or-later-expected?page=2#comments
他產(chǎn)生該問題的原因是類名使用了Test結(jié)尾,而以Test結(jié)尾的類,IDEA 會將其識別為 junit 測試類去運行(這是IDEA的bug,不過我用的版本已經(jīng)修復了)。解決方案就是類名去掉Test后綴
上面的解決方案給了我一點啟發(fā),會不會我的錯誤也是類名問題呢?于是我也去掉Test后綴,即將StronglyReferenceTest改為StronglyReferenc后再次執(zhí)行測試方法,發(fā)現(xiàn)問題解決了,測試方法執(zhí)行正常
但我的類本來就是一個 junit 測試類啊,為什么以Test結(jié)尾也會報錯呢?而且我之前的其他項目,類名也是以Test結(jié)尾的,也能正常運行
后來發(fā)現(xiàn)原來是我之前在src/main/java下也創(chuàng)建了一個StronglyReferenceTest類
當src/main/java文件夾下有與src/test/java文件夾下相同名字的類時,執(zhí)行該類的測試方法就會報錯,解決方案就是盡量避免相同名稱的類出現(xiàn)(實際上項目中一般不會出現(xiàn)這種問題)
結(jié)論
src 下的類,最好不要以Test結(jié)尾,這樣做并不規(guī)范,而且容易導致編輯器的誤解,以為該類是測試類,從而導致意想不到的錯誤
我也向 IDEA 上報了該問題,等待 IDEA 的回復,感興趣的同學可以點擊該鏈接圍觀:https://youtrack.jetbrains.com/issue/IDEA-264240
最后,如果該文章對你有幫助的話,可以在微信搜索huangxy關注我的公眾號,也可以掃下方二維碼進行關注
總結(jié)
以上是生活随笔為你收集整理的IDEA 运行 Junit 测试用例报 !!! JUnit version 3.8 or later expected 错误的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ip地址+斜杠数字含义
- 下一篇: 42所一流大学研究生奖助学金汇总~