【问题标题】:IntelliJ JUnit5 ClassNotFoundErrorIntelliJ JUnit5 ClassNotFoundError
【发布时间】:2017-03-20 14:42:32
【问题描述】:

在尝试运行我的 TestFactory 时出现此错误:

Mär 20, 2017 3:39:05 PM org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry loadTestEngines
INFORMATION: Discovered TestEngines with IDs: [junit-jupiter, junit-vintage]
Exception in thread "main" java.lang.NoClassDefFoundError: org/opentest4j/TestAbortedException
    at org.junit.jupiter.engine.descriptor.TestFactoryTestDescriptor.<clinit>(TestFactoryTestDescriptor.java:47)
    at org.junit.jupiter.engine.discovery.TestFactoryMethodResolver.resolveMethod(TestFactoryMethodResolver.java:56)
    at org.junit.jupiter.engine.discovery.TestMethodResolver.resolveElement(TestMethodResolver.java:63)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.tryToResolveWithResolver(JavaElementsResolver.java:164)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.lambda$resolve$8(JavaElementsResolver.java:155)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1548)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolve(JavaElementsResolver.java:158)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.lambda$resolveForAllParents$4(JavaElementsResolver.java:128)
    at java.lang.Iterable.forEach(Iterable.java:75)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveForAllParents(JavaElementsResolver.java:127)
    at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveMethod(JavaElementsResolver.java:65)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.lambda$resolveSelectors$3(DiscoverySelectorResolver.java:63)
    at java.util.ArrayList.forEach(ArrayList.java:1249)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:62)
    at org.junit.jupiter.engine.JupiterTestEngine.resolveDiscoveryRequest(JupiterTestEngine.java:50)
    at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:43)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:109)
    at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:79)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: org.opentest4j.TestAbortedException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 28 more

但是,当从命令行(mvn test)运行它时,它正在工作。

IDE:IntelliJ 2016.3.3 爪哇:1.8 项目 SDK:Java 1.8

图书馆员:

ant-1.8.2.jar
hamcrest-core-1.3.jar
junit-4.12.jar
junit-jupiter-api-5.0.0-M3.jar
junit-jupiter-engine-5.0.0-M3.jar
transform-executor-java-4.2.2-SNAPSHOT.jar
transform-util-java-4.6.1-SNAPSHOT.jar
xmlbeans-2.6.0.jar
xmlunit-1.5.jar

我不明白...

【问题讨论】:

  • 你在标题中说 JUnit 5,但是 pom 引入了 JUnit 4。它是哪个?尝试将 opentest4j 依赖项添加到您的 pom.xml。确保版本有那个缺失的类。

标签: java maven intellij-idea junit5


【解决方案1】:

您必须将opentest4j-1.0.0-M1.jar 添加到您的类路径

将以下依赖项添加到您的 pom:

<!-- https://mvnrepository.com/artifact/org.opentest4j/opentest4j -->
<dependency>
    <groupId>org.opentest4j</groupId>
    <artifactId>opentest4j</artifactId>
    <version>1.0.0-M1</version>
    <scope>test</scope>
</dependency>

【讨论】:

  • 我没有使用 Maven 来调试我的项目,我实际上使用的是 JUnit 5。(我试图让它在 ide 中工作的唯一原因)
  • 如果你没有使用 maven,请将 jUnit jar 文件作为库文件添加到你的项目中
  • @JudeNiroshan 他不应该这样做。如果是 maven 项目,所有依赖项都应该添加到 pom.xml 中。它是一个 maven 项目:commandline (mvn test)
  • @PeterLawrey 的信息完全一样吗?
  • @Jens 不,抱歉,尝试 JUnit5 时缺少另一个类。这是自从 InteliJ 迁移到 Junit 5 以来我尝试修复的第三个类。:/
【解决方案2】:

JUnit jar 可能已过期。

  1. 删除项目依赖项中列出的那些
  2. @Test 注释上调用快速修复
  3. 选择Add JUnit5 to classpath
  4. 选择所需的 Jar 位置

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2018-05-29
    • 2015-04-19
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2020-01-18
    相关资源
    最近更新 更多