Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于LaunchFactory的NoClassDefFoundError,未找到使用JUnit 5的Eclipse测试 问题_Java_Eclipse_Junit_Junit5 - Fatal编程技术网

Java 由于LaunchFactory的NoClassDefFoundError,未找到使用JUnit 5的Eclipse测试 问题

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

每当我运行我的项目JUnit测试(使用JUnit5和Java9以及EclipseOxy1.a)时,我都会遇到Eclipse找不到任何测试的问题

描述 在运行配置下,eclipse甚至找不到用@Test注释的方法,而是只显示“(所有方法)”。 希望下图能更好地展示我的设置:

控制台输出:
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注释
这些步骤中的一些步骤,但最终问题仍然存在。

您遇到的问题已经得到修复,将在即将发布的Oxygen.3(4.7.3),2018年3月21日发布

作为解决方法,将测试代码放在一个单独的项目中并将测试中的项目添加到modulepath,但不要将
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(){}