Sha*_*gon 64 java eclipse junit java-9 junit5
每当我运行我的项目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
Run Code Online (Sandbox Code Playgroud)
我已经试过了
其中一些步骤可以在这里找到,但最终问题仍然存在.
And*_*kyi 53
我对STS 3.9.1也有同样的问题.然而,似乎是一个Eclipse错误,为了解决这个问题,您可以junit-platform-launcher为项目添加测试依赖项(https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher)
这就是我为使用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}"
}
Run Code Online (Sandbox Code Playgroud)
gradle.properties文件:
junit5MinorVersion=1.0
Run Code Online (Sandbox Code Playgroud)
如果您在使用IntelliJ IDEA时看到此异常,我相信同样适用.
str*_*tor 51
我通过右键单击测试并选择"运行配置"并将"测试运行器:"选项更改为"JUnit 4"来修复此问题,如下所示:
我再次运行测试,它工作正常.
Jer*_*ney 26
简单修复:(添加 JUnit 5 库)
指示:
Ald*_*ian 18
到目前为止,答案并没有解决与其他不一定使用Eclipse的人共享代码的问题.这是一个命题.关键是使用maven配置文件来解决Eclipse Case.
它假设您已经junit5.version在pom中定义了一个属性,如:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit5.version>5.1.1</junit5.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
然后在该profiles部分添加以下内容:
<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>
Run Code Online (Sandbox Code Playgroud)
在此之后您需要做的就是在本地Eclipse中选择配置文件:右键单击您的项目并选择Maven > Select Maven Profiles...(或按Ctrl+ Alt+ P),然后检查我们刚刚创建的"eclipse"配置文件.
有了你就完成了.您的Eclipse将按预期运行Junit 5测试,但您添加的配置不会污染其他构建或其他IDE
how*_*ger 17
你遇到了已经修复的Eclipse bug 525948,它将在2018年3月21日即将发布的Oxygen.3(4.7.3)中发布.
解决方法是,将测试代码放在单独的项目中,并将测试中的项目添加到模块路径中,但不要将module-info.java测试项目添加到测试项目中.使用您的项目,类和模块命名,它应该看起来像这样:
另请参阅我的视频,其中显示了Eclipse Oxygen.1a中的Java 9和JUnit 5
小智 15
使用 JUnit Jupiter (v.5.5.1) 添加这个 maven 依赖解决了这个问题。
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
继Andrii Karaivanskyi的回答之后是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>
Run Code Online (Sandbox Code Playgroud)
就我而言,问题出在我自己,而不是像Eclipse这样的IDE。我已经导入了JUnit 4 Test类。
所以不要导入这个:
import org.junit.Test // JUnit 4
Run Code Online (Sandbox Code Playgroud)
但是一定要导入其中一个:
import org.junit.jupiter.api.Test // JUnit 5
Run Code Online (Sandbox Code Playgroud)
这些解决方案都无济于事:
问题是Eclipse 2018-12支持JUnit 5.3.1。如果使用之前的版本启动,它将失败。
因此,请确保至少使用5.3.1。
5.4.0也可以。
如果您的父pom是Spring Boot,则需要(在依赖管理中)确保junit-jupiter-api设置为相同版本。您不需要junit-platform-runner或-launcher!
小智 6
从一开始,错误消息就告诉您找不到类: NoClassDefFoundError这意味着 junit 的 PATH 是问题所在。
按右键单击项目文件夹并选择属性或选择项目文件夹并按组合 cmd + i。
从列表“Java 构建路径”中选择。
就这些。尝试再次运行测试。
小智 6
代替:
import org.junit.Test;
Run Code Online (Sandbox Code Playgroud)
和:
import org.junit.jupiter.api.Test;
Run Code Online (Sandbox Code Playgroud)
小智 5
仅供参考,“未使用junit5找到测试”的另一个原因是(无意或有意)将测试用例声明为“私有”:
// Example of test case that doesn't get included
@Test
private void testSomeMethod() {
}
Run Code Online (Sandbox Code Playgroud)
他们需要公开。
| 归档时间: |
|
| 查看次数: |
70111 次 |
| 最近记录: |