java.lang.NoClassDefFoundError在junit中

我在我的junittesting代码中得到这个错误在java中。 我在网上查了一下,它说我需要在类path中添加junit.jar。

在Eclipse中,我已经将它添加到“项目属性”窗口的类path中,但仍然出现初始化错误。 我该怎么办..?

这是错误的完整跟踪:

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 
  1. 在包浏览器中右键单击您的项目>单击属性
  2. 转到Java构buildpath>库选项卡
  3. 点击“添加库”button
  4. selectJUnit
  5. 点击下一步。

你应该能够从那里处理它。

  1. Eclipse – >顶部菜单 – >运行 – >运行configuration
  2. 删除所有您的testing的发生。 您的testing可能会显示为YourTest.Method_1()。 删除这个。
  3. 重新运行。 让Eclipse构build一个全新的configuration。

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

hamcrest-core-1.3.jar

junit-4.12.jar

如果你从JUnit网站上下载了JUnit jar,但忘记下载Hamcrest jar的话,可能会出现同样的问题 – 这两个都是必需的(说明指出要下载,但是我跳过了!

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

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

尝试以下步骤:

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

它为我工作。

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

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

至:

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

就是这样。 这种方式我只加载所有的文件模式* -context.xml在我的testingpath。

  1. 确保将环境variablesJUNIT_HOME设置为c:\ JUNIT。
  2. 然后在运行configuration>selectclasspath>添加外部jar子junit-4.11.jar

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

  1. select项目 – > buildpath – >添加库并selectjunit(它包含junit和hamcrest-core)
  2. 从maven回购下载hamcrest-core,并将其添加到您的类path中。

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

在POM文件中,你可以排除额外的版本,它的工作原理。

甚至Junit4.11.jar也没有hamcrest-core.jar。 我在类path中显式添加,问题已解决。

如果你有不止一个版本的java,它可能会干扰你的程序。

我build议你下载JCreator。

当您这样做时,请单击configuration,选项和JDKconfiguration文件。 从列表中删除旧版本的Java。 然后点击播放button。 你的程序应该会出现。

如果没有,请按Ctrl + Alt + O,然后再次按播放button。