88

我在 junit 测试代码中的 java 中收到此错误。我在网上查了一下,它说我需要在类路径中添加junit.jar。

在 Eclipse 中,我已将其添加到项目属性窗口的类路径中,但仍然出现初始化错误。我应该怎么办..?

这是错误的完整跟踪:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 25 more
4

17 回答 17

110
  1. 在包资源管理器中右键单击您的项目 > 单击属性
  2. 转到 Java 构建路径 > 库选项卡
  3. 单击“添加库”按钮
  4. 选择 JUnit
  5. 点击下一步。
  6. 在下拉按钮中选择 JUnit4 或其他新版本。
  7. 点击完成。
  8. 然后确定。
于 2010-11-19T18:13:01.917 回答
20
  1. Eclipse -> 顶部菜单 -> 运行 -> 运行配置
  2. 删除所有出现的测试。您的测试可能显示为 YourTest.Method_1()。也删除它。
  3. 重新运行。让 Eclipse 构建一个全新的配置。

附录:我在本地创建了一个“用户库”并添加到我的项目中

hamcrest-core-1.3.jar

junit-4.12.jar

于 2016-10-11T22:51:27.627 回答
12

如果您从 JUnit 网站下载了 JUnit jar,但忘记下载 Hamcrest jar,则可能会出现同样的问题 - 两者都是必需的(说明说要同时下载,但我跳过了!哎呀)

于 2013-02-25T23:53:20.867 回答
11

在 Maven 中使用时,将工件 junit:junit 从例如 4.8.2 更新到 4.11。

于 2015-04-13T18:00:15.273 回答
8

在 Eclipse 上,我可以通过以下步骤解决上述问题:

右键单击要运行的测试文件, 选择运行方式 -> 运行配置 -> 选择类路径选项卡 -> 选择引导条目 -> 选择高级 -> 选择添加库 -> 选择 JUnit -> 下一步 ->从下拉列表中选择 JUnit4 -> 完成

然后选择应用 -> 运行

于 2018-08-29T11:00:03.953 回答
2

org/hamcrest/SelfDescribeing 类不在运行时类路径中。

于 2010-11-19T19:35:43.003 回答
2

当错误显示缺少 Filter 类时,这些步骤对我有用(如这个错误重复的问题中所报告的:JUnit: NoClassDefFoundError: org/junit/runner/manipulation/Filter):

  1. 确保在您的项目中只引用一次 JUnit 4 (我也删除了 Maven 特性,但我不确定这一步是否对解决问题有任何影响)
  2. 右键单击包含单元测试的文件,选择属性,然后在运行/调试设置下,从该文件的启动配置中删除任何条目。点击应用并关闭。
  3. 右键单击包含单元测试的项目,选择属性,然后在运行/调试设置下,从启动配置中删除任何涉及 JUnit 的条目。点击应用并关闭。
  4. 清理项目,然后运行测试。

感谢这些答案给了我这个解决方案的提示:https ://stackoverflow.com/a/34067333/5538923和https://stackoverflow.com/a/39987979/5538923)。

于 2018-05-21T14:56:57.847 回答
1
  1. 确保环境变量 JUNIT_HOME 设置为 c:\JUNIT。
  2. 然后在运行配置 > 选择类路径 > 添加外部 jars junit-4.11.jar
于 2013-07-06T13:06:08.137 回答
1

原因是“hamcrest-core”jar 不在类路径中,因为它不直接与 junit jar 一起提供。所以有两种方法可以解决这个问题:

  1. 选择项目->构建路径->添加库并选择junit(它包含junit和hamcrest-core)
  2. 从 maven repo 下载 hamcrest-core 并将其添加到您的类路径中。
于 2014-09-26T04:30:50.500 回答
1

尝试以下步骤:

  1. 转到项目的运行配置。在 Classpath 选项卡中添加 JUnit 库。
  2. 重试相同的步骤。

它对我有用。

于 2012-01-11T09:22:46.720 回答
1

我有同样的问题,问题出在我的测试类中的@ContextConfiguration,我也在加载servlet上下文,我只是改变了:

@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })

至:

@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })

就是这样。这样我只在我的测试路径中加载模式 *-context.xml 的所有文件。

于 2012-05-03T08:37:46.010 回答
1

就我而言,我将我的库添加到 Modulepath 而不是 Classpath。

仅当 JUnit 正确添加到 Classpath 时才有效。

在此处输入图像描述

于 2020-03-28T18:22:21.767 回答
1

将我的两美分添加到其他答案中。

检查您是否有任何机会在下创建测试类src/main/java而不是通常src/test/java。当您出于某种原因创建新的测试类时,前者是 Eclipse 中的默认设置,可以忽略。就这么简单。

于 2019-07-29T07:31:37.517 回答
1

我正在关注此视频:https ://www.youtube.com/watch?v=WHPPQGOyy_Y 但未能运行测试。之后,我删除了所有下载的文件,并使用图片中的步骤添加了 Junit。

在此处输入图像描述

于 2020-08-03T11:08:49.047 回答
0

如果类路径中存在 2 个版本的 hamcrest-library 或 hamcrest-core,也会出现此错误。

在 pom 文件中,您可以排除额外的版本并且它可以工作。

于 2015-03-31T11:24:31.400 回答
0

甚至 Junit4.11.jar 也没有 hamcrest-core.jar。我在类路径中明确添加,问题得到解决。

于 2016-09-24T20:42:50.930 回答
-1

如果您有多个版本的 java,它可能会干扰您的程序。

我建议你下载 JCreator。

执行此操作时,单击配置、选项和 JDK 配置文件。从列表中删除旧版本的 Java。然后点击播放按钮。你的程序应该会出现。

如果没有,请按 ctrl+alt+O,然后再次按播放按钮。

于 2011-09-11T14:37:07.807 回答