Eclipse JUnit - 在Eclipse窗口中看到“initializationError”的可能原因

时间:2013-03-03 20:50:06

标签: java eclipse junit

我知道这个问题非常普遍,但我没有找到任何关于为什么会出现此错误的提示。在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

26 个答案:

答案 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"
        
        )

以下是 JUnit 错误的屏幕截图:Junit Runner Error

以下是控制台中的堆栈跟踪:

enter image description here

最终的解决方案是我必须更改保存我的功能文件的正确包的路径。

查看下面更正后的代码片段:

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 {

}