我知道这个问题非常普遍,但我没有找到任何关于为什么会出现此错误的提示。在Eclipse窗口中看到 initalizationError 的可能原因是什么?我没有获得有用的信息只是一个漫长而无用的故障跟踪(此处未包括在内)。
我正在使用JUnit 4.11
我编写了以下代码 - 只是为了查看它是否有效:
package test;
import static org.junit.Assert.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class SimpleTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Test
public void test() {
assertEquals(15, 15);
}
}
编辑抱歉在Eclipse窗口中,它实际上被称为“失败追踪”:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing at
java.lang.ClassLoader.defineClass1(Native Method) 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$100(Unknown Source) at
java.net.URLClassLoader$1.run(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:10)
at
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at
org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at
org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
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.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
答案 0 :(得分:43)
你可能遇到了两个问题之一:
1)你正在使用JUnit 4.11,它不包括hamcrest。将hamcrest 1.3库添加到类路径中。
2)你的类路径上有hamcrest 1.3,但你的类路径上有另一个版本的junit或hamcrest。
对于背景,junit pre 4.11包括hamcrest 1.1的缩减版本。 4.11删除了这些类。
答案 1 :(得分:37)
对我来说这是一个愚蠢的错误。我无意中将测试设置为私有而非公开:
@Test
private void thisTestWasCausingProblems() {
...
}
应该是
@Test
public void thisTestIsOK() {
...
}
答案 2 :(得分:18)
试试“Project&gt; Clean ...” - 似乎是Eclipse中许多问题的解决方案!
答案 3 :(得分:8)
对我来说,这是一个JUnit注释方法中缺少的static
关键字,例如:
@AfterClass
public static void cleanUp() {
// ...
}
答案 4 :(得分:5)
当我用@Ignore注释类时,我收到了这个错误,我尝试通过右键单击它来运行特定的测试。删除@Ignore修复了问题。
答案 5 :(得分:4)
我已经尝试了完全相同的错误。我的问题是我创建的SetUp方法被声明为静态。
如果使用eclipse,可以通过单击错误上方然后检查“失败跟踪”窗口,在下面找到一个很好的描述......这就是我发现真正问题的方法!
答案 6 :(得分:3)
还要确保所有@Before
- ,@After
- 以及任何JUnit注释的方法都声明为public
。我的声明为private
,导致了这个问题。
答案 7 :(得分:2)
如果您的班级中有私人规则,也会出现此问题:
@Rule
private TemporaryFolder folderRule;
公开。
答案 8 :(得分:1)
我的问题是我的父类没有@Test
个方法。我在那里只用了一些实用工具。当我宣布它abstract
时它起作用。
答案 9 :(得分:1)
我的错误在于我错过了测试方法的@Test注释。
答案 10 :(得分:1)
我刚遇到同样的问题和相同的消息。我能够通过将send
存档导入Java Building Path来修复它。我使用的是JUnit 4.12版本。
答案 11 :(得分:1)
我遇到了同样的问题:一旦它出现了路径问题,而其他时间缺少@Test
注释。
答案 12 :(得分:1)
对我而言,它与公共记录有关。自从我使用
@RunWith(SpringJUnit4ClassRunner.class)
这解决了我的问题
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
答案 13 :(得分:1)
对我来说,这是由于测试方法的“返回类型”。应该是“无效”
答案 14 :(得分:0)
对我来说解决方案是其中一种方法必须是无效的,我将它作为布尔值。
答案 15 :(得分:0)
我有同样的问题,我的解决方案如下。
我只从网上安装了junit.jar文件,但这个库与hacrest-core.jar有关 当我下载hacrest-core.jar文件并将其添加到我的项目中时,一切正常。
答案 16 :(得分:0)
Junit 4.11不适用于Spring Test框架。 此链接InitializationError When Use Spring + Junit还解释了如何在eclipse中调试junit initalizationError。
答案 17 :(得分:0)
如果您正在使用xtend语言(或其他一些带有类型推断的JVM)并且没有明确定义返回类型,那么由于最后一个表达式,它可能会设置为非void类型JUnit失败了。
答案 18 :(得分:0)
我有另一个失败的痕迹,但对于未来的访问者使用他们最喜欢的搜索引擎:
对我来说,问题是eclipse决定在我的测试类中只执行一个方法(我无法弄清楚为什么)。 特别是如果您没有更改设置中的任何内容,请检查您的运行配置。
答案 19 :(得分:0)
在我的情况下,我在pom.xml中更改了项目名称,因此生成了新的目标目录,junit正在搜索旧目录中的类。您还需要在Eclipse中更改JUnit的目录
Properties -> Java Build Path -> Source (Default output folder)
还要检查,因为同一窗口中列出的某些源文件夹可能具有以前的目录名称。你也需要改变它们。
答案 20 :(得分:0)
对我来说,我错误地在测试方法中添加了一个参数,导致初始化错误。
答案 21 :(得分:0)
我遇到了同样的问题......我正在使用具有JUnit依赖范围的maven构建工具作为&#39; test&#39;我的@Test方法在主模块中。
要解决,我已经: 1.在pom.xml中注释了JUnit依赖项的scope标记 2.重建包裹 3.确保Test类只有一个构造函数
问题可以双重折叠: 1. JUnit依赖项仅限于测试范围,@ Test方法位于主范围内 2.测试类有多个构造函数
答案 22 :(得分:0)
我已经从poi.apache.org天真地将junit-4.12.jar添加到了我在Eclipse中的构建路径。我删除了它(Project,Properties,Java Build Path,Libraries,junit-4.12.jar,Remove),然后在我的测试类中,按Ctrl-1后允许Eclipse“修复Project Setup”。没有更多的问题! :-)
答案 23 :(得分:0)
在我的情况下,我在测试用例中导入了以下内容:
import org.junit.jupiter.api.Test;
正确的导入是:
import org.junit.Test;
不仅要从junit导入任何旧的测试类型,还要确保选择正确的类型。
答案 24 :(得分:0)
只要这有帮助,我就在使用Junit5,但是@RunWith(SpringRunner.class)指向import org.springframework.test.context.junit4.SpringRunner,它搞乱了东西,因此给出了初始化错误。 我解决了这个问题,并且奏效了。
答案 25 :(得分:0)
就我而言,这是因为我没有指向保存我的功能(黄瓜)文件的正确包。这是一个路径规范错误的案例。请参阅下面的代码片段:
import org.junit.runner.RunWith;
import io.cucumber.junit.CucumberOptions;
import io.cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/features",
glue = "stepDefinitions"
)
以下是控制台中的堆栈跟踪:
最终的解决方案是我必须更改保存我的功能文件的正确包的路径。
package cucumberOptions;
import org.junit.runner.RunWith;
import io.cucumber.junit.CucumberOptions;
import io.cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/java/features",
glue = "stepDefinitions"
)
public class TestRunner {
}