【问题标题】:Eclipse No tests found using JUnit 5 caused by NoClassDefFoundError for LauncherFactoryEclipse NoClassDefFoundError 导致 LauncherFactory 找不到使用 JUnit 5 的测试
【发布时间】:2018-03-24 20:50:42
【问题描述】:

问题

每当我运行我的项目 JUnit 测试(使用 JUnit 5 和 Java 9 和 Eclipse Oxygen 1.a)时,我都会遇到 eclipse 找不到任何测试的问题。

说明

在运行配置下,eclipse甚至找不到带有@Test注解的方法,而是只显示“(所有方法)”。 希望下面的图片可以更好地了解我的设置:

控制台输出:

java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.base/java.lang.Class.newInstance(Unknown Source)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    ... 11 more

到目前为止我尝试了什么

我已经试过了

  • 从构建路径中删除测试文件夹并重新添加。
  • 将鼠标悬停在带有@Test 注释的方法上开始测试,然后单击“作为 JUnit 测试运行”。
  • 从 Buildpath 中移除 JUnit 并重新添加
  • 重启eclipse
  • 我还将项目整个项目从一台机器移动到另一台机器,并使用那里提供的 eclipse 安装进行了尝试
  • 重命名测试方法。
  • 重新键入@Test 注释

其中一些步骤can be found here,但最终问题仍然存在。

【问题讨论】:

标签: java eclipse junit junit5


【解决方案1】:

将其更改为 JUnit 4 及其作品。请试一试(如果你有简单的例子,那么确定试试这个。)点击那个类文件——>它将出现运行/调试设置——>点击新的——>选择JUnit——>点击确定—— > 将 TestRunner 更改为 Junit 4。然后单击应用并确定。然后运行它肯定会工作。

【讨论】:

    【解决方案2】:

    我实际上使用的是 spring-tool-suite-4-4.5.1,当我想运行一个测试类时我遇到了这个错误。 解决方案是在库中添加“java build path”、“junit5”

    【讨论】:

    • 我最初使用了这个解决方案并且它有效,然后我阅读了其他答案,我发现“正确”的答案是@armin.miedl's。我从构建路径中删除了 JUnit 5 库,并将 Test 注释导入替换为正确的。
    【解决方案3】:

    我痛苦地一一检查现有的答案,但没有一个适用于我,也没有一个为我解决。

    就我而言,在项目属性和源选项卡下,我已将测试文件夹添加为源路径。此条目下有一个子属性,显示为Output Folder。我将其设置为我希望生成测试类文件的位置,并将它们保存在此位置。

    但是,JUnit 5 是 Jupiter 5.7.0 版本(这是 eclipse 附带的版本,而不是我添加到我的项目中的单独的 mvn 依赖项),当运行实际上是在一个 不同的 比我指定的文件夹,这是target/test-classes。如果我手动将我的类文件从我指定的Output Folder 文件夹移动到target/test-classes 文件夹,那么我的单元测试将运行。

    因此,请确保您的类文件位于运行时认为它们应该位于的位置。

    【讨论】:

      【解决方案4】:

      @Test 注解必须从 org.junit.jupiter.api.Test 导入,这样 Junit5 才能读取它。 Junit4 使用从 org.junit.Test 包导入的@Test 注解。

      【讨论】:

        【解决方案5】:

        将 Java 项目转换为 Maven 项目为我解决了这个问题。通过以下方式在 Eclipse 上完成转换:右键单击项目 -> 配置 -> 转换为 Maven 项目

        【讨论】:

          【解决方案6】:

          您应该确保您的测试用例函数是公开的而不是私有的,以便测试运行程序可以访问它。

          @Test
          private void testmethod(){}
          

          @Test
          public void testmethod(){}
          

          【讨论】:

            【解决方案7】:

            替换:

            import org.junit.Test;
            

            与:

            import org.junit.jupiter.api.Test;
            

            【讨论】:

              【解决方案8】:

              删除 JUnit 库,然后再次添加它为我解决了这个问题。

              【讨论】:

                【解决方案9】:

                您可能从org.junit.Test 导入@Test,这是一个JUnit 4 注释。 Junit5 测试运行器不会发现它。

                Junit5 测试运行器将发现一个带有 org.junit.jupiter.api.Test 注释的测试

                Import org.junit.Test throws error as "No Test found with Test Runner "JUnit 5""找到答案

                【讨论】:

                  【解决方案10】:

                  我在 SpringBoot 项目中遇到了同样的问题,就我而言,原因是输出文件夹“/target/test-classes”为空。

                  在.classpath文件中手动修复,寻找属性为“test”的classpathentry并更改输出属性的内容:

                  从这里:

                  <classpathentry kind="src" output="<project folder>/target/test-classes" path="src/test/java">
                      <attributes>
                          <attribute name="test" value="true"/>
                          <attribute name="optional" value="true"/>
                          <attribute name="maven.pomderived" value="true"/>
                      </attributes>
                  </classpathentry>
                  

                  到这里:

                  <classpathentry kind="src" output="target/test-classes" path="src/test/java">
                      <attributes>
                          <attribute name="test" value="true"/>
                          <attribute name="optional" value="true"/>
                          <attribute name="maven.pomderived" value="true"/>
                      </attributes>
                  </classpathentry>
                  

                  【讨论】:

                    【解决方案11】:

                    将 org.junit.platform 添加到您的 pom 并构建它。接下来,您需要进入 TEST FILE 的“运行配置”并在类路径中添加 JUNIT,APPLY->RUN 将解决问题。

                    【讨论】:

                      【解决方案12】:

                      我遇到了类似的问题。这是由于属性中的源路径不正确。 打开项目属性 -> Java 构建路径 -> 源。如果是您的情况,请删除不正确的路径

                      【讨论】:

                        【解决方案13】:

                        尝试将您的单元测试配置重新配置为项目 JRE。

                        【讨论】:

                          【解决方案14】:

                          在使用 Spring Boot api 实现 Mockito 时发生此问题。下面在 gradle 文件中添加以下依赖项

                          compile group: 'org.mockito', name: 'mockito-core', version: '2.22.0'
                          

                          注意:Spring boot 2.2.0版本

                          【讨论】:

                            【解决方案15】:

                            我也遇到了同样的问题,你只需要添加库,Junit 库已经随 Eclipse 一起提供了,所以你只需要按照下面的操作

                            构建路径 > 配置构建路径 > 库 > 添加库 > JUnit > 下一步 > 完成

                            对我有用

                            【讨论】:

                            • 它在 Eclipse 中运行良好。版本:2020-06 (4.16.0) 版本号:20200615-1200
                            【解决方案16】:

                            我复制了一些代码并创建了一个 TC。基本上将普通的 java 类转换为 JUnit TC。 我是gettgig错误。 后来我从 New -> Junit TC 创建了一个新的 JUnit 类。复制了相同的代码。它工作正常并且错误消失了。

                            【讨论】:

                              【解决方案17】:

                              简单修复:(添加 JUnit 5 库)

                              说明:

                              • 右键项目->构建路径->配置构建路径
                              • 在弹出窗口中 -> 添加库 -> JUnit -> JUnit 5 -> 完成 -> 应用
                              • 您应该会看到 JUnit 5 库(及其 jar)已添加到您的项目中
                              • 右键项目->Maven->更新项目->确定

                              【讨论】:

                              • GRADLE FIX: (Add JUnit 5 Library) INSTRUCTIONS: * 右击项目 -> 构建路径 -> 配置构建路径 * 在弹出窗口中 -> 添加库 -> JUnit -> JUnit 5 -> 完成 -> 应用 * 你应该看到 JUnit 5 库(及其 jars)添加到你的项目 * 右键单击​​项目 -> Gradle -> 刷新 Gradle 项目 * 右键单击​​项目 -> 运行方式 -> Junit Test
                              • 这应该被接受,谢谢@JerryCarney
                              【解决方案18】:

                              您缺少具有组的 JUnit 5 平台启动器:'org.junit.platform',名称:'junit-platform-launcher'

                              只需添加你的 POM:

                              <dependency>
                                     <groupId>org.junit.platform</groupId>
                                     <artifactId>junit-platform-launcher</artifactId>
                                  </dependency>
                              

                              【讨论】:

                                【解决方案19】:

                                你应该知道:

                                来自 junit4

                                @Before 与 @Test 一起使用:“import org.junit.Test

                                @BeforeEach 来自 Junit5 与:“import org.junit.jupiter.api.Test

                                所以请确保您使用的是来自同一版本 Junit 的导入,否则我猜它不会工作。

                                【讨论】:

                                  【解决方案20】:

                                  当我将我的 jupiter api 版本更改为最新版本时,它得到了解决。同时,我的 Eclipse 和其他 Eclipse 扩展 IDE(例如 STS)出现构建路径错误。对于每次 maven 更新,ide 都会强制我设置 JRE 系统库。

                                  【讨论】:

                                    【解决方案21】:

                                    可能是junit-platform-launcher/junit-platform-runner的版本造成的。

                                    1.1.0不起作用

                                    1.4.1 适用于我的设置。

                                    我认为这是 eclipse 中的一个错误,因为它正在使用更高版本的 junit 库而不是其他版本。

                                    这解决了我的问题。另一个解决方案对我来说似乎不太可行或风险。 谢谢。

                                    【讨论】:

                                      【解决方案22】:

                                      我也遇到了 Eclipse(版本:2019-12 (4.14.0))的这个问题。该解决方案似乎要么使用 IntelliJ,要么使用 Maven 测试在 Eclipse 中运行此类测试。

                                      【讨论】:

                                        【解决方案23】:

                                        刚刚通过 Eclipse 菜单添加了我的 Test.class 并开始工作。 右键项目->新建->其他->JUnit->JUnit测试用例

                                        【讨论】:

                                          【解决方案24】:

                                          我正在使用:

                                          弹簧工具套件 4 版本:4.4.2.RELEASE 内部版本号:201911201053 Java版本:1.8.0_191

                                          并且显示的消息是 没有找到测试运行器“JUnit5”的测试

                                          对我有用的是下面的配置

                                              <properties>
                                                  <java.version>1.8</java.version>
                                                  <junit-jupiter.version>5.5.2</junit-jupiter.version>
                                                  <junit-platform.version>1.5.2</junit-platform.version>
                                              </properties> 
                                          
                                              <dependency>
                                                  <groupId>org.junit.jupiter</groupId>
                                                  <artifactId>junit-jupiter-engine</artifactId>
                                                  <version>${junit-jupiter.version}</version>
                                                  <scope>test</scope>
                                              </dependency>
                                              <dependency>
                                                  <groupId>org.junit.platform</groupId>
                                                  <artifactId>junit-platform-launcher</artifactId>
                                                  <version>${junit-platform.version}</version>
                                                  <scope>test</scope>
                                              </dependency>
                                          

                                          【讨论】:

                                            【解决方案25】:

                                            我遇到了同样的错误,在我的情况下,只需转到 Project Properties &gt; Maven &gt; Update project 和/或清理和重建项目。

                                            【讨论】:

                                              【解决方案26】:

                                              对我来说,我配置了构建路径以添加 JUnit 5 库并添加依赖项

                                                   <dependency> 
                                                      <groupId>org.junit.platform</groupId> 
                                                      <artifactId>junit-platform-launcher</artifactId> 
                                                      <version>1.1.0</version> 
                                                      <scope>test</scope> 
                                                   </dependency>
                                              

                                              分开。

                                              【讨论】:

                                                【解决方案27】:

                                                你应该改变

                                                @Test
                                                public static void testmethod(){}
                                                

                                                @Test
                                                public void testmethod(){}
                                                

                                                @Test 不支持静态方法

                                                【讨论】:

                                                  【解决方案28】:

                                                  您只能使用junit-jupiter 作为测试依赖项,而不是junit-jupiter-apijunit-platform-launcherjunit-jupiter-engine

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

                                                  【讨论】:

                                                  • 此解决方案适用于 JUnit 5.6.2、Java 11(和 eclipse 2020-03/4.15.0)
                                                  【解决方案29】:

                                                  我正在使用 Eclipse 2019-09。

                                                  我必须将 junit-bom 版本更新到至少 5.4.0。我以前有 5.3.1,这导致了 OP 的相同症状。

                                                  我现在的配置是:

                                                      <dependencyManagement>
                                                          <dependencies>
                                                              <dependency>
                                                                  <groupId>org.junit</groupId>
                                                                  <artifactId>junit-bom</artifactId>
                                                                  <version>5.5.2</version>
                                                                  <type>pom</type>
                                                                  <scope>import</scope>
                                                              </dependency>
                                                          </dependencies>
                                                      </dependencyManagement>
                                                  

                                                  【讨论】:

                                                  • 另一种选择是将 5.4.0 添加到 pom 属性中
                                                  【解决方案30】:

                                                  Andrii Karaivanskyi's answer 之后是 Maven POM 声明:

                                                  <properties>
                                                      ...
                                                      <junit-jupiter.version>5.2.0</junit-jupiter.version>
                                                      <junit-platform.version>1.2.0</junit-platform.version>
                                                      ...
                                                  </properties>
                                                  
                                                  <dependencies>
                                                      ...
                                                      <dependency>
                                                          <groupId>org.junit.jupiter</groupId>
                                                          <artifactId>junit-jupiter-engine</artifactId>
                                                          <version>${junit-jupiter.version}</version>
                                                          <scope>test</scope>
                                                      </dependency>
                                                      <dependency>
                                                          <groupId>org.junit.platform</groupId>
                                                          <artifactId>junit-platform-launcher</artifactId>
                                                          <version>${junit-platform.version}</version>
                                                          <scope>test</scope>
                                                      </dependency>
                                                      ...
                                                  </dependencies>
                                                  

                                                  更新

                                                  根据Alexander Wessel 的评论,您可以按照his answer 中的说明使用org.junit:junit-bom 来提问Eclipse No tests found using JUnit 5 caused by NoClassDefFoundError for LauncherFactory

                                                  【讨论】:

                                                  • 不要声明 jupiter 和平台版本的属性,use the BOM instead。基本上使用scope=import type=pom在dependencyManagement标签中添加对BOM的依赖,然后在测试范围内将依赖添加到junit-platform-launcher和junit-jupiter-engine,在依赖部分不提供版本 . BOM 将始终确保您在类路径中只有一个版本的 JUnit Platform 和 Jupiter,并且各个版本都是预期的版本(例如 5.2.0 和 1.2.0)。
                                                  • @AlexanderWessel 我没有 BOM。这只是一个示例摘录,无论它在哪里,都必须使用 Maven 声明依赖项。
                                                  • 这不是您有(或者更确切地说是您的项目有)BOM 本身。我在解释,通过导入 JUnit 5 提供的BOM ,您可以确保Junit Jupiter 和Junit Platform 版本兼容,并且您不需要声明版本在各个依赖项中,因此也不再需要声明版本属性。需要明确的是:您的示例 确实 工作正常。但是导入 JUnit BOM 更优雅一些(在我看来),并且在某些情况下更安全。
                                                  猜你喜欢
                                                  • 1970-01-01
                                                  • 2020-07-27
                                                  • 2018-10-11
                                                  • 2011-02-17
                                                  • 2012-07-07
                                                  • 1970-01-01
                                                  • 2013-12-02
                                                  • 1970-01-01
                                                  • 1970-01-01
                                                  相关资源
                                                  最近更新 更多