junit中的java.lang.NoClassDefFoundError

时间:2010-11-19 18:10:14

标签: java eclipse junit noclassdeffounderror

我在junit测试代码中的java中收到此错误。我抬头看网,它说我需要在类路径中添加junit.jar。

在Eclipse中,我已将它添加到Project Properties窗口的类路径中,但仍然会出现初始化错误。我该怎么办..?

这是错误的完整描述:

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

17 个答案:

答案 0 :(得分:92)

  1. 在Package Explorer中右键单击您的项目&gt;单击“属性”
  2. 转到Java Build Path&gt; “库”选项卡
  3. 点击“添加图书馆”按钮
  4. 选择JUnit
  5. 单击“下一步”。
  6. 选择下拉按钮JUnit4或其他新版本。
  7. 点击完成。
  8. 然后确定。

答案 1 :(得分:19)

  1. Eclipse - &gt;顶部菜单 - &gt;运行 - &gt;运行配置
  2. 删除所有出现的测试。您的测试可能显示为YourTest.Method_1()。也可以删除它。
  3. 重新运行。让Eclipse构建一个全新的配置。
  4. 附录:我在本地创建了一个“用户库”并添加到我的

    项目中
      

    hamcrest-core-1.3.jar

         

    junit-4.12.jar

答案 2 :(得分:11)

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

答案 3 :(得分:9)

在Maven中使用时,更新工件junit:junit from eg 4.8.2至4.11。

答案 4 :(得分:3)

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

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

然后选择应用->运行

答案 5 :(得分:2)

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

答案 6 :(得分:1)

尝试以下步骤:

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

答案 7 :(得分:1)

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

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

为:

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

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

答案 8 :(得分:1)

  1. 确保将环境变量JUNIT_HOME设置为c:\ JUNIT。
  2. 然后在运行配置&gt;选择classpath&gt;添加外部罐子junit-4.11.jar

答案 9 :(得分:1)

原因是&#34; hamcrest-core&#34; jar不在classpath中,因为它没有直接使用junit jar。所以有两种方法可以解决这个问题:

  1. 选择项目 - &gt; buildpath - &gt;添加库并选择junit(它包含junit和amp; hamcrest-core)
  2. 从maven repo下载hamcrest-core并将其添加到您的类路径中。

答案 10 :(得分:1)

就我而言,我将库添加到了Modulepath上,而不是在Classpath上。

仅在将JUnit正确添加到Classpath中时有效。

enter image description here

答案 11 :(得分:1)

当错误显示Filter类缺失时(如 false-diplicated 问题:JUnit: NoClassDefFoundError: org/junit/runner/manipulation/Filter中所述),这些步骤对我有用:

  1. 确保在项目中仅引用一次JUnit 4(我也删除了Maven的性质,但我不确定此步骤是否对解决 问题)
  2. 右键单击包含单元测试的文件,然后选择 属性,在“运行/调试”设置下,删除所有条目 来自该文件的启动配置。点击Apply并关闭。
  3. 右键单击包含单元测试的项目,然后选择 属性,在“运行/调试”设置下,删除所有条目 涉及启动配置中的JUnit。点击Apply并关闭。
  4. 清理项目,然后运行测试。
  5. 感谢这些答案,为我提供了此解决方案的提示:https://stackoverflow.com/a/34067333/5538923https://stackoverflow.com/a/39987979/5538923)。

答案 12 :(得分:0)

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

enter image description here

答案 13 :(得分:0)

在其他答案中加上我的两分钱。

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

答案 14 :(得分:0)

甚至Junit4.11.jar都没有hamcrest-core.jar。我在类路径中明确添加了问题并解决了问题。

答案 15 :(得分:0)

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

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

答案 16 :(得分:-1)

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

我建议你下载JCreator。

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

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