59

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

26 回答 26

52

您可能遇到以下两个问题之一:

1) 您使用的是 JUnit 4.11,它不包括 hamcrest。将 hamcrest 1.3 库添加到您的类路径中。

2) 你的类路径上有 hamcrest 1.3,但你的类路径上有另一个版本的 junit 或 hamcrest。

作为背景,junit pre 4.11 包含了 hamcrest 1.1 的精简版。4.11 删除了这些类。

于 2013-03-03T21:57:39.847 回答
51

For me it was a silly mistake. I inadvertently set the test as private instead of public:

@Test
private void thisTestWasCausingProblems() {
...
}

it should have been

@Test
public void thisTestIsOK() {
...
}
于 2015-02-18T17:03:06.313 回答
20

只需尝试“Project > Clean...” - 似乎是 Eclipse 中许多问题的解决方案!

于 2014-08-11T17:33:32.193 回答
10

static对我来说,这是JUnit 注释方法之一中缺少的关键字,例如:

@AfterClass
public static void cleanUp() {
    // ...
}
于 2014-11-04T04:43:25.017 回答
6

当该类使用 @Ignore 注释时,我收到此错误,我尝试通过右键单击它来运行特定测试。删除@Ignore 解决了这个问题。

于 2016-05-11T20:37:50.297 回答
4

我已经尝试过完全相同的错误。我的问题是我创建的 SetUp 方法被声明为静态的。

如果使用 eclipse,可以通过单击错误上方然后检查故障跟踪窗口来获得很好的描述,就在下面……这就是我发现真正问题的方式!

于 2014-11-03T22:02:13.143 回答
3

还要确保您将所有@Before-, @After- 和任何 JUnit 注释的方法声明为public. 我已经声明了private导致问题的原因。

于 2017-12-07T11:37:05.890 回答
2

如果您的班级中有私有规则,也会出现此问题:

@Rule
private TemporaryFolder folderRule;

公开。

于 2016-11-24T16:10:52.973 回答
1

对我来说,这是由于测试方法的“返回类型”。它应该是“无效的”

于 2015-08-07T06:45:34.930 回答
1

如果这有帮助,我使用的是 Junit5,但 @RunWith(SpringRunner.class) 指向 import org.springframework.test.context.junit4.SpringRunner,它搞乱了事情,因此给出了初始化错误。我解决了这个问题,它奏效了。

于 2019-09-01T02:36:04.327 回答
1

对我来说,这与公共日志记录有关。由于我在使用

@RunWith(SpringJUnit4ClassRunner.class)

这解决了我的问题

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
于 2015-08-16T03:24:05.637 回答
1

我只是遇到了同样的问题和同样的信息。我能够通过将hamcrest-all-1.3.jar存档导入 Java 构建路径来修复它。我正在使用 JUnit 4.12 版本。

于 2016-03-26T03:26:26.190 回答
1

我遇到了同样的问题:曾经是 excel 路径问题,而其他时候它缺少@Test注释。

于 2015-09-28T10:31:59.317 回答
1

我的错误是我错过了测试方法上的 @Test 注释。

于 2018-01-16T07:10:11.160 回答
1

就我而言,我的测试用例中有以下导入:

import org.junit.jupiter.api.Test;

正确的导入是:

import org.junit.Test;

不要只从 junit 导入任何旧的测试类型,确保选择正确的类型。

于 2019-07-04T20:35:40.823 回答
1

我的问题是我的父类没有@Test方法。我在那里只使用了一些实用程序。当我宣布它abstract有效时。

于 2016-07-26T07:39:48.023 回答
0

我遇到了同样的问题...我正在使用具有 JUnit 依赖范围的 Maven 构建工具作为“测试”,而我的 @Test 方法位于主模块中。

为了解决,我有: 1. 在 pom.xml 中注释 JUnit 依赖的范围标签 2. 重建包 3. 确保 Test 类只有一个构造函数

问题可以分为两个方面: 1. JUnit 依赖仅限于测试范围,@Test 方法在主范围 2. 测试类有多个构造函数

于 2015-04-27T19:25:51.353 回答
0

对我来说,解决方案是其中一种方法必须是无效的,我把它当作布尔值。

于 2016-02-18T14:16:21.333 回答
0

对我来说,我错误地在导致初始化错误的测试方法中添加了一个参数。

于 2018-01-03T02:54:37.123 回答
0

就我而言,我在 pom.xml 中更改了项目名称,因此生成了新的目标目录,而 junit 正在旧目录中搜索类。您还需要在 Eclipse 中更改 JUnit 的目录

Properties -> Java Build Path -> Source (Default output folder)

并且还要检查,因为在同一窗口中列出的某些源文件夹可能具有以前的目录名称。你也需要改变它们。

于 2017-09-12T10:16:27.213 回答
0

In my case, it was because I was not pointing to the correct package where I kept my feature (cucumber) file(s). This was a case of wrong path specification. See code snippet below:

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

Below is the screenshot of the JUnit error: Junit Runner Error

Below is the Stack Trace in the console:

enter image description here

The final solution was I had to change the path to the correct package where my feature files were kept.

See the corrected code snippet below:

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 {

}
于 2021-01-27T12:55:02.373 回答
0

我有同样的问题,我的解决方案如下。

我只从网上安装了 junit.jar 文件,但是这个库与 hacrest-core.jar 相关当我下载 hacrest-core.jar 文件并将其添加到我的项目中时,一切正常。

于 2015-09-18T08:28:35.587 回答
0

如果您使用的是 xtend 语言(或其他带有类型推断的 JVM 语言)并且没有显式定义返回类型,那么它可能会因为最后一个表达式而设置为非 void 类型,这将使​​ JUnit 失败。

于 2016-10-19T13:00:49.937 回答
0

Junit 4.11 不适用于 Spring Test 框架。此外,此链接InitializationError When Use Spring + Junit解释了如何在 eclipse 中调试 junit initalizationError。

于 2016-09-17T00:58:38.303 回答
0

我得到了另一个失败跟踪,但对于使用他们最喜欢的搜索引擎的未来访问者:

对我来说,问题是 eclipse 不知何故决定在我的测试类中只执行一个方法(不过我不知道为什么)。特别是如果您没有更改设置中的任何内容,请检查您的运行配置。

于 2017-01-19T11:53:37.650 回答
0

我天真地将 poi.apache.org 中的 junit-4.12.jar 添加到我在 Eclipse 中的构建路径中。我删除了它(项目、属性、Java 构建路径、库、junit-4.12.jar、删除),然后在我的测试类中允许 Eclipse 在按下 Ctrl-1 后“修复项目设置”。没有更多的问题!:-)

于 2019-02-25T17:35:51.210 回答