我在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
原因是“hamcrest-core”jar不在classpath中,因为它不直接与junit jar一起使用。所以有两种方法可以解决这个问题:
当错误显示Filter类缺失时,这些步骤对我有效(正如在这个错误的问题中报告的那样:JUnit: NoClassDefFoundError: org/junit/runner/manipulation/Filter):
感谢这些答案给了我这个解决方案的提示:https://stackoverflow.com/a/34067333/5538923和https://stackoverflow.com/a/39987979/5538923)。
如果类路径中存在2个版本的hamcrest-library或hamcrest-core,也会出现此错误。
在pom文件中,您可以排除额外的版本,它可以工作。
甚至Junit 4.11.jar也没有hamcrest-core.jar。我在类路径中明确添加,问题得到了解决。
将我的两分钱加到其他答案上。
检查你是否有任何机会在src/main/java
而不是通常的src/test/java
下创建你的测试类。当您因任何原因创建新的测试类并且可以忽略时,前者是Eclipse中的默认值。它可以这么简单。
如果您有多个版本的java,它可能会干扰您的程序。
我建议你下载JCreator。
执行此操作时,单击“配置”,“选项”和“JDK配置文件”。从列表中删除旧版本的Java。然后单击播放按钮。你的程序应该出现。
如果没有,请按ctrl + alt + O然后再次按播放按钮。
附录:本地我创建了一个“用户库”并添加到我的项目中
hamcrest-core-1.3.jar
junit-4.12.jar
如果您从JUnit网站下载了JUnit jar,但是忘记下载Hamcrest jar,则会出现同样的问题 - 两者都是必需的(说明说要同时下载,但我跳过了!哎呀)
在Maven中使用时,更新工件junit:junit from eg 4.8.2至4.11。
在Eclipse上,我可以通过以下步骤解决上述问题:
右键单击要运行的测试文件,选择Run As - > Run Configurations - > Select Classpath选项卡 - > Select to the bootstrap Entries - > Select Advanced - > Select Add library - > Select JUnit - > Next - >从下拉列表中选择JUnit4 - >完成
然后选择Apply - > Run
org / hamcrest / SelfDescribing类不在运行时类路径中。
尝试以下步骤:
它对我有用。
我有同样的问题,问题出在我测试类的@ContextConfiguration中,我正在加载servlet上下文我只是改变:
@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })
至:
@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })
就是这样。这样我只在我的测试路径中加载模式* -context.xml的所有文件。