Java 由于LaunchFactory的NoClassDefFoundError,未找到使用JUnit 5的Eclipse测试 问题
每当我运行我的项目JUnit测试(使用JUnit5和Java9以及EclipseOxy1.a)时,我都会遇到Eclipse找不到任何测试的问题 描述 在运行配置下,eclipse甚至找不到用@Test注释的方法,而是只显示“(所有方法)”。 希望下图能更好地展示我的设置: 控制台输出:Java 由于LaunchFactory的NoClassDefFoundError,未找到使用JUnit 5的Eclipse测试 问题,java,eclipse,junit,junit5,Java,Eclipse,Junit,Junit5,每当我运行我的项目JUnit测试(使用JUnit5和Java9以及EclipseOxy1.a)时,我都会遇到Eclipse找不到任何测试的问题 描述 在运行配置下,eclipse甚至找不到用@Test注释的方法,而是只显示“(所有方法)”。 希望下图能更好地展示我的设置: 控制台输出: java.lang.NoClassDefFoundError:org/junit/platform/launcher/core/LauncherFactory 位于org.eclipse.jdt.interna
java.lang.NoClassDefFoundError:org/junit/platform/launcher/core/LauncherFactory
位于org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.(JUnit5TestLoader.java:31)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(未知源)
位于java.base/java.lang.reflect.Constructor.newInstance(未知源)
位于java.base/java.lang.Class.newInstance(未知源)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
原因:java.lang.ClassNotFoundException:org.junit.platform.launcher.core.LauncherFactory
位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(未知源)
位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(未知源)
位于java.base/java.lang.ClassLoader.loadClass(未知源)
... 还有11个
到目前为止我试过什么
我已经试过了
- 从生成路径中删除测试文件夹并再次添加
- 要启动测试,请将鼠标悬停在带有@test注释的方法上,然后单击“作为JUnit测试运行”李>
- 从Buildpath中删除JUnit并再次添加
- 重新启动eclipse
- 我还将整个项目从一台机器移动到另一台机器,并在那里使用提供的eclipse安装进行了尝试
- 重命名测试方法
- 重新键入@Test注释
module info.java
添加到测试项目中。使用项目、类和模块命名时,应如下所示:
另请参见我对STS 3.9.1也有同样的问题。不过,这看起来像是一个Eclipse bug,要解决这个问题,您可以将测试依赖项
junitplatformlauncher
添加到您的项目()
这就是我在使用gradle的项目中所做的:
dependencies {
// other stuff here
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "5.${junit5MinorVersion}"
testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: "1.${junit5MinorVersion}"
}
gradle.properties文件:
junit5MinorVersion=1.0
如果您在使用IntelliJ IDEA时看到此异常,我相信这同样适用。使用STS 3.9.1时,我遇到了相同的问题。但是,目前我不需要任何新的JUnit5特性,所以我尝试强制使用旧版本。如果使用maven,可以将以下依赖项添加到pom.xml中:
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>${junit.platform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit.vintage.version}</version>
<scope>test</scope>
</dependency>
org.junit.platform
junit平台发射器
${junit.platform.version}
测试
org.junit.jupiter
朱尼特木星发动机
${junit.jupiter.version}
测试
org.junit.vintage
朱尼特老式发动机
${junit.vintage.version}
测试
这对我来说很有用(至少我不需要显式地使用JUnit5)。在创建了一个新的测试用例后,我遇到了同样的问题:Eclipse->new->JUnit测试用例。它创建了一个没有访问级别修饰符的类。我可以通过在class关键字前面加一个public来解决这个问题。到目前为止,答案并没有解决与其他不一定使用Eclipse的人共享代码的问题。这里有一个建议。关键是使用maven概要文件来解决Eclipse问题 它假定您已在pom中定义了属性junit5.version,如:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit5.version>5.1.1</junit5.version>
</properties>
在此之后,您所要做的就是在本地Eclipse中选择概要文件:右键单击您的项目并选择Maven>selectmaven Profiles…
(或点击Ctrl+Alt+p),然后检查我们刚刚创建的“Eclipse”概要文件
这样你就完了。您的Eclipse将按预期运行Junit 5测试,但您添加的配置不会污染其他版本或其他IDE我通过右键单击测试并选择“运行配置”并将“测试运行程序:”选择更改为“Junit 4”解决了此问题,如下所示: 我再次运行了测试,它成功了。仅供参考,“使用junit5未找到测试”的另一个原因是(无意或有意)将测试用例声明为“私有”:
它们需要公开。我在eclipse版本Oxygen.3a(4.7.3a)中遇到了同样的错误。Maven依赖项不匹配存在问题。为了解决此问题,我已使用以下依赖项更新了Pom.xml http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.netapp.junitnmacitapractice 青年实践 0.0.1-快照
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<junit.jupiter.version>5.1.1</junit.jupiter.version>
<junit.platform.version>1.1.1</junit.platform.version>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit.platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
UTF-8
1.8
5.1.1
1.1.1
maven编译器插件
3.1
${java.version}
${java.version}
org.junit.jupiter
朱尼特木星发动机
${junit.jupiter.version}
org.junit.platform
junit平台跑步者
${junit.platform.version}
测试
<profiles>
<profile>
<id>eclipse</id>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</profile>
</profiles>
// Example of test case that doesn't get included
@Test
private void testSomeMethod() {
}
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<junit.jupiter.version>5.1.1</junit.jupiter.version>
<junit.platform.version>1.1.1</junit.platform.version>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>${junit.platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform launcher -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
<junit-jupiter.version>5.2.0</junit-jupiter.version>
<junit-platform.version>1.2.0</junit-platform.version>
</properties>
import org.junit.Test // JUnit 4
import org.junit.jupiter.api.Test // JUnit 5
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
<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>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.1.0</version>
<scope>test</scope>
</dependency>
<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>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
</dependency>
import org.junit.Test;
import org.junit.jupiter.api.Test;
@Test
private void testmethod(){}
@Test
public void testmethod(){}