如何获得Eclipse 2018.09以默认使用JUnit 4测试运行器?

Kay*_* II 8 java eclipse junit unit-testing junit4

我刚刚升级到Eclipse 2018.09(问题也出现在Eclipse Photon上),但是在使用JUnit 4的项目中无法很好地发挥作用。新版本似乎默认情况下使用JUnit 5运行程序运行所有测试,失败,并出现以下错误,因为我在项目的类路径上只有JUnit 4,而在JUnit 5上却没有:

无法运行测试。 未找到测试跑步者“ Junit 5”的测试。

java.lang.NoClassDefFoundError: org/junit/platform/engine/EngineExecutionListener
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:59)
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:34)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:370)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:365)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:309)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:224)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:208)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.EngineExecutionListener
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 12 more
Run Code Online (Sandbox Code Playgroud)

我希望能够方便地在此项目中运行测试,而无需升级到新的主要版本的JUnit,而不必采用不断重复的解决方法。我认为这将需要以某种方式更改默认的测试运行器。


我发现的解决方法以及为什么我对它们不满意:

  1. 手动更新每一个为运行配置测试使用的JUnit 4亚军。我对此感到不满意,因为这很烦人并且需要大量工作。我找不到改变JUnit运行配置默认值以始终使用JUnit 4运行程序的方法。关于“原型”运行配置,有一些很有希望的东西,但是对于JUnit配置,所有选项均为灰色且不起作用。
  2. 将JUnit 5添加到类路径。这允许JUnit 5运行程序工作,但是我对此不满意,因为不应因为我的IDE而被迫升级。

Eclipse Photon版本信息:

Eclipse Java EE IDE for Web Developers.
Version: Photon Release (4.8.0)
Build id: 20180619-1200
OS: Windows 7, v.6.1, x86_64 / win32
Java version: 1.8.0_171
Run Code Online (Sandbox Code Playgroud)

“检查更新”显示没有要安装的相关软件包。

Eclipse 2018.09版本信息:

Eclipse Java EE IDE for Web Developers.
Version: 2018-09 (4.9.0)
Build id: 20180917-1800
OS: Windows 7, v.6.1, x86_64 / win32
Java version: 1.8.0_171
Run Code Online (Sandbox Code Playgroud)

小智 6

我今天也偶然发现了这个问题。如果在类路径上找到 JUnit 5 依赖项,则 eclipse 似乎默认使用 JUnit 5 运行程序。

对于我的 maven 项目,调查依赖层次结构表明实际上 JUnit 4 和 JUnit 5 依赖项都在类路径上。JUnit 4 作为我自己添加的测试依赖项,JUnit 5 作为从我依赖的另一个库继承的传递依赖项。从该依赖项中排除 JUnit 5 后,eclipse 默认再次使用 JUnit 4 运行程序。

也许您可以检查您的项目是否也有您不知道的对 JUnit 5 的不需要的依赖?


Ins*_*dge 5

就我而言,该项目是使用Spring Initializr创建的,它已自动将以下排除添加到 spring-boot-starter-test 依赖项中:

<exclusion>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
</exclusion>
Run Code Online (Sandbox Code Playgroud)

删除它解决了我的问题。


小智 0

我现在遇到了同样的问题,并在 POM.xml 文件中添加Vintage Engine依赖项后修复了该问题。试试看。

MVN 存储库: https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine

  • 谢谢,但我认为这是一个解决方法。我认为我不必因为 IDE 的原因而修改项目的类路径。特别是因为 IDE 非常乐意使用 JUnit 4 运行器运行测试(这只是让它变得烦人和不切实际)。 (7认同)