【问题标题】:Eclipse JUnit - possible causes of seeing "initializationError" in Eclipse windowEclipse JUnit - 在 Eclipse 窗口中看到“initializationError”的可能原因
【发布时间】:2013-02-17 21:36:13
【问题描述】:

我知道这个问题很笼统,但我没有找到任何提示说明为什么会出现此错误。在 Eclipse 窗口中看到 initializationError 的可能原因是什么?我没有得到任何有用的信息,只是一个漫长而无用的故障跟踪(此处不包括)。

我正在使用 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

【问题讨论】:

  • 请包含堆栈跟踪?
  • 确实——仅仅因为堆栈跟踪(和完整消息)对您来说似乎没有用并不意味着它实际上没有用。
  • 您的类路径中缺少一些 jar。看看这个:resource

标签: java eclipse junit


【解决方案1】:

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

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

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

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

【讨论】:

  • 确实,我忘了添加 hamcrest。谢谢你们提供的信息。
  • Matthew, Project > Clean 对我有用。你能告诉我可能是什么原因吗?谢谢你。陈奎。
  • 正是我在为 Junit.4.10.jar 工作。但是给 junit.4.11.jar 错误。我一个人试过4.10。未尝试 4.11 的解决方案。
  • 随着我的 java8 升级。我更新到junit 4.12。它以 hamcrest 作为其传递依赖并解决了这个问题。
  • 忘记导入hamcrest 1.3,生活更安全
【解决方案2】:

对我来说,这是一个愚蠢的错误。我无意中将测试设置为 private 而不是 public

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

应该是的

@Test
public void thisTestIsOK() {
...
}

【讨论】:

  • 忘记声明方法的作用域会导致同样的问题。将方法声明为 public 为我修复了它。
  • @Before 方法有同样的问题。拯救了这一天!
  • 我不小心忘记将 class 标记为 public。
  • 我的问题很相似 - @Before 方法是私有的 - 谢谢!
【解决方案3】:

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

【讨论】:

  • 我很惊讶地发现这种方法对我有用。它确实做到了!顺便说一句,我的 Eclipse 项目中有 Junit 4.11 和 hamcrest 1.3。
  • 我做了这个(也禁用了“自动构建”,直到构建完成,现在它可以工作了!这是“THE”解决方案。荣誉!
【解决方案4】:

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

@AfterClass
public static void cleanUp() {
    // ...
}

【讨论】:

  • 我在使用@Before@After 时遇到了相反的问题,这些函数不能是静态的!
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

    • 感谢 Pablo,这正是我找到问题所需要的。
    • 如果您在故障跟踪窗口中没有看到任何内容,请单击故障跟踪窗口右上角的过滤堆栈跟踪按钮。
    【解决方案7】:

    还要确保您将所有@Before-、@After- 和任何带有JUnit 注释的方法都声明为public。我将我的声明为private,这导致了问题。

    【讨论】:

    • 我的项目中也有问题 - 错误地将方法设为私有而不是公共
    【解决方案8】:

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

    @Rule
    private TemporaryFolder folderRule;
    

    公开。

    【讨论】:

      【解决方案9】:

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

      【讨论】:

      • 是的,这也让我着迷......我正在快速设置一个测试,只是错误地将@Test注释放在一个函数上,它抛出了这个错误!
      【解决方案10】:

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

      @RunWith(SpringJUnit4ClassRunner.class)
      

      这解决了我的问题

      <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
          <version>1.2</version>
      </dependency>
      

      【讨论】:

        【解决方案11】:

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

        【讨论】:

        • 好吧,遗憾的是 Excel 不是设置的一部分,并且该方法已注释。
        • 拥有一个完全没有@Test 的测试类对我来说导致了初始化错误。
        【解决方案12】:

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

        【讨论】:

          【解决方案13】:

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

          【讨论】:

            【解决方案14】:

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

            【讨论】:

              【解决方案15】:

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

              import org.junit.jupiter.api.Test;

              正确的导入是:

              import org.junit.Test;

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

              【讨论】:

                【解决方案16】:

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

                【讨论】:

                  【解决方案17】:

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

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

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

                  【讨论】:

                    【解决方案18】:

                    我遇到了同样的问题,我的解决方案如下。

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

                    【讨论】:

                      【解决方案19】:

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

                      【讨论】:

                        【解决方案20】:

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

                        【讨论】:

                          【解决方案21】:

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

                          【讨论】:

                            【解决方案22】:

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

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

                            【讨论】:

                              【解决方案23】:

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

                              Properties -&gt; Java Build Path -&gt; Source (Default output folder)

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

                              【讨论】:

                                【解决方案24】:

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

                                【讨论】:

                                  【解决方案25】:

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

                                  【讨论】:

                                    【解决方案26】:

                                    就我而言,这是因为我没有指向保存我的功能(黄瓜)文件的正确包。这是路径规范错误的情况。参见下面的代码 sn-p:

                                    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报错截图:

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

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

                                    请看下面更正后的代码 sn-p:

                                    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 {
                                    
                                    }
                                    

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2023-03-12
                                      • 2011-02-04
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2015-09-04
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多