Eclipse 中的 JUNIT 测试类 - java.lang.ClassNotFoundException

Posted

技术标签:

【中文标题】Eclipse 中的 JUNIT 测试类 - java.lang.ClassNotFoundException【英文标题】:JUNIT Test class in Eclipse - java.lang.ClassNotFoundException 【发布时间】:2011-08-08 15:32:59 【问题描述】:

我正在尝试运行我的 junit 测试(以验证属性文件是否正确加载)但是 我得到了ClassNotFoundException,尽管该类在那里并且所有必需的库也在那里。

这是我得到的错误:

Class not found ConfigurationManagerTest                                                 java.lang.ClassNotFoundException: ConfigurationManagerTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
    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)

关于如何解决这个问题的任何想法?

谢谢。

【问题讨论】:

尝试清理并构建您的项目。 试了很多次,还是一样的错误 在 Eclipse 中打开运行配置窗口,选择你运行的单元测试并转到选项卡类路径:在这里你可以检查类路径中的实际内容。 谢谢,我在上面的类路径选项卡中看到了一个错误:[JRE]: JRE not compatible with workspace .class file compatible: 1.6,也许这就是原因? 我在使用 Eclipse 4.2 的独立 Java 类和 JUnit 测试中遇到了同样的问题。我检查了所有路径等。我尝试“清理并构建您的项目”。有效!谢谢哈里·乔伊。 【参考方案1】:

ConfigurationManagerTest 在您的类路径中找不到。确保 ConfigurationManagerTest.class 文件在您的类路径中可用。

如果它没有成功编译,或者它是在你没有告诉 Eclipse 项目应该在类路径上的目录中创建的,它可能不存在。

假设您已将测试类放在单独的文件夹中,请确保它显示在“包资源管理器”视图(而不是“导航器”视图)中。

在项目属性“Java Build Path”和“Source”选项卡下,您还可以查看是否包含用于构建的源文件夹以及生成 .class 文件的位置。

【讨论】:

在丢失的类文件上添加更多内容:检查您是否在 \build\classes\ 目录中看到类文件。如果您没有看到任何内容,请检查 Eclipse 的问题窗格中有关构建测试项目的错误。修复这些,它将建立。如果一切都失败了,您可能需要求助于 Project->clean,然后重新构建。如果您真的很绝望,请重新启动 Eclipse(远射)。 我注意到在我的 Eclipse 项目设置中,所有构建类都没有进入默认项目构建目录,因此我的测试甚至无法访问构建工件。 是的,我的 maven 项目正在 /bin 中构建 .class 文件。必须通过高级/添加文件夹选项在 runco​​nfig/classpath 选项卡中的用户条目下添加该目录。 这对 mo 很有效!我的工作区中有许多(未来)项目存在编译问题。将测试类添加到类路径中运行了我需要的测试。【参考方案2】:

还有一种可能。我刚才遇到了同样的问题,这里的解决方案都没有帮助。除了删除和重新创建项目 - 我不想尝试它。有什么帮助的是,一个接一个地清理项目两次! Clean + build 可以重复任意次数 - 这无济于事。只有干净+干净,然后构建就可以了。 (日食 3.6)。当然,您应该为此禁用自动构建。

编辑:这篇文章在 2017 年 11 月 15 日得到了最后的加分。因此,问题(和解决方案)仍然存在。

【讨论】:

谢谢,这有帮助,但我不得不禁用自动构建。我还必须解决其他与 jUnit 无关的缺失库。 完全没有帮助(Eclipse 4.5) @ChristianVielma 我希望如此。在 9 个版本的演变过程中,他们应该删除错误! 两次!那是 Eclipse。 @Alessandro 神奇的是他们已经有 4 年的相同错误了。我正在测量错误计数的生命周期:-)【参考方案3】:

另一个可能的问题是缺少构建器(它会阻止构建您的 .class 文件)。

检查您的 .project 文件是否包含以下几行

<buildSpec>
  <buildCommand>
    <name>org.eclipse.jdt.core.javabuilder</name>
    <arguments>
    </arguments>
  </buildCommand>
</buildSpec>
<natures>
  <nature>org.eclipse.jdt.core.javanature</nature>
</natures>

【讨论】:

这是我的问题 - 忘记了我的项目启用了 AspectJ,所以我没有安装 AJDT 构建器。在这些情况下 Eclipse 会悄悄地拒绝构建项目,这很烦人。 这解决了我的问题。谢谢老兄.. :)【参考方案4】:

当我将测试类拖放到不同的包时,这发生在我身上。我刚刚做了以下

    在文本编辑器中保存了课程。 从 Eclipse 项目资源管理器中删除了有问题的类。 重新创建了类。

宾果!我现在可以运行测试了!

【讨论】:

太棒了!我的所有测试都不再编译(没有 .class 文件)。我使用您的方法只删除并重新创建了一个类,然后突然重新编译了所有测试类。 对我来说根本没有帮助(Eclipse 4.5)【参考方案5】:

我遇到了这个问题,很难意识到哪里出了问题。该项目有一个有一些错误的依赖项目,导致构建无法执行。当我移除这个依赖问题后,项目就按预期构建了。

Ps.:我正在做一个编译错误很多的项目,因为我们正在移植一个从 Delphi 转换到 Java 的应用程序,所以一开始我并没有在意编译错误,所以才花了我有时间找出问题所在。

【讨论】:

【参考方案6】:

检查属性->java 构建路径-> 库。应该没有错误,在我的情况下,maven中有错误。一旦我将所需的 jar 放入 maven repo 中,它就可以正常工作了

【讨论】:

【参考方案7】:

我尝试了这里描述的所有答案,但没有一个有效,但发现这个thread slomek 以非常简单的方式解决了问题。只需转到项目-> 属性-> java 构建路径。然后将 Junit 移动到顶部,方法是点击右上方的底部。然后一切都编译好了。

【讨论】:

【参考方案8】:

我尝试了这里和其他帖子中提到的所有内容。人们提供的一些解决方案是:

    更改测试的输出文件夹 为将从 Maven 运行测试编译的项目创建自定义构建器 在项目构建路径的 Order 和 Export 列表中将 Maven 依赖项移到更高位置

还有很多很多,但我发现可以使用的方法如下:关闭开发环境。从我的本地 Maven 存储库中删除项目使用的 jar。打开 IDE。构建项目。运行测试。

经过数小时的敲击键盘并遵循建议的解决方案后,这个解决方案奏效了!

【讨论】:

【参考方案9】:

对我有用的是删除测试的运行配置。然后右键单击 testclass 并单击 run as junit test。

现在它为我重新创建了正确的运行配置。

【讨论】:

【参考方案10】:

这可以展开的另一种方式,对我来说就是这样做的,如果你有一个 Eclipse 没有告诉你的构建错误。如果编译单元测试失败,则没有 .class 文件,您将收到 ClassNotFoundException。

在我的情况下,缺少第 3 方 jar 文件。当我运行测试时,我得到一个弹出窗口,上面写着“所需项目中存在错误”。我正在处理一个巨大的项目,我总是收到该消息,因为 Eclipse 无法使用某些源代码(长话短说)。它也没有说明错误是什么。所以我点击“继续”,然后我得到了异常。

一旦我意识到发生了什么,通过将丢失的 jar 添加到运行 -> 调试配置下的类路径中很容易修复...

我不确定如何最好地检测或防止这种情况发生,除非在出现问题时意识到这种可能性并查看您最近的更改以找出可能出现的问题。

【讨论】:

【参考方案11】:

您确定您的测试类在构建文件夹中吗?您在单独的 JVM (fork=true) 中调用 junit,因此在该调用期间工作文件夹可能会发生变化,并且构建是相对的,这可能会导致问题。

使用 -verbose 或 -debug 开关从命令行(不是从 Eclipse)运行 ant 以查看详细的类路径/正在调用的工作目录 junit,如果仍然无法解决此问题,请在此处发布结果.

【讨论】:

【参考方案12】:

上面盖伊的答案的变体,涉及更多的建设者。假设您配置了一个 Ant 构建器:

<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
        <arguments>
            <dictionary>
                <key>LaunchConfigHandle</key>
                <value>&lt;project&gt;/.externalToolBuilders/myprojectantlaunch.launch</value>
            </dictionary>
        </arguments>
    </buildCommand>
</buildSpec>

如果 Ant 构建和 Eclipse 构建具有不同的输出位置,Eclipse 可能无法在类路径上找到测试类。在 Ant 构建器的情况下,还要检查配置的目标以进行清理、自动、手动和清理后构建,以确保调用构建单元测试的目标。

【讨论】:

【参考方案13】:

我将此答案添加为上面的解决方案评论。

    您只需编辑主项目文件夹中的文件.project。使用适当的 XML 编辑器,否则你会从 Eclipse 中得到一个fatal error,表明你无法打开这个项目。 我将这个&lt;nature&gt;org.eclipse.jdt.core.javanature&lt;/nature&gt; 添加到&lt;natures&gt;&lt;/natures&gt; 以创建我的项目性质Java。 然后我将这些行正确缩进&lt;buildCommand&gt;&lt;name&gt;org.eclipse.jdt.core.javabuilder&lt;/name&gt;&lt;arguments&gt;&lt;/arguments&gt;&lt;/buildCommand&gt; 添加到&lt;buildSpec&gt;&lt;/buildSpec&gt;Run as JUnit ... 成功

【讨论】:

【参考方案14】:

在资源管理器中右键项目:Build Path -> Order and Export -> 选择 JRE System Library [jdk] 并点击底部按钮。

【讨论】:

【参考方案15】:

又一个变体。 不知何故,我以前工作的测试课程似乎是从其他地方运行的;当我运行测试时,我的编辑不会执行。

我发现 $project_locsrc/test/java 文件的输出文件夹不是我所期望的。它无意中被设置为 $project_loctarget/classes。 我在项目属性、Java 构建路径、源选项卡中正确设置了它。

【讨论】:

【参考方案16】:

如果你有一个 maven 项目尝试运行:

mvn clean compile

然后在 Eclipse 中清理并构建您的项目。

【讨论】:

【参考方案17】:

我在调试 Junits 的 Eclipse Helios 上遇到了类似的问题。我的问题略有不同,因为我能够成功运行 Junits,但是当我在调试相同的 JUNIT 时遇到 ClassNotFoundException。

我在 ***.com 和其他地方的论坛中尝试了各种不同的解决方案,但似乎没有任何效果。在为这些问题敲了近两天之后,我终于找到了解决方案。

如果这些解决方案似乎都不起作用,只需删除在您的工作区中创建的 .metadata 文件夹。这会增加导入项目和您所做的各种配置的额外开销,但这些肯定会解决这些问题。

希望这些有所帮助。

【讨论】:

【参考方案18】:

在“Package Explorer”视图中,右键单击您的测试类,然后“Build Path”>>“Include”,应该可以了。

【讨论】:

【参考方案19】:

我也遇到了同样的例外,互联网上的解决方案都没有帮助我。 我的项目包含多个模块。我的 Junit 代码位于 Web 模块中。它指的是客户端模块的代码。

最后,我尝试了: 右键单击(Web模块)项目->构建路径->源选项卡->链接源->添加src文件位置(客户端模块的)

就是这样!它就像一个魅力 希望对你有帮助

【讨论】:

【参考方案20】:

我收到此错误是因为我最近创建了一个新工作区,而我的“已安装的 JRE”设置不正确。确保在Preferences -&gt; Java -&gt; Installed JREs 已选择 JDK 的根文件夹。出于某种原因,我在新工作区中的默认设置是 JRE。

【讨论】:

【参考方案21】:

我知道很久以前就已经回答了这个问题,但答案并没有为我解决问题,但是,我只是从 buildpath 设置中的源代码中删除了所有内容并重新添加了它们

【讨论】:

【参考方案22】:

我遇到了这个问题,在我的情况下,问题在于编译,我使用的是 maven 并且测试类没有编译。

我通过执行 maven 安装来修复它(它编译所有文件),您也可以检查其他原因,以避免测试编译,例如您的“运行配置”跳过测试以节省时间。

【讨论】:

【参考方案23】: 假设您尝试了所有合理的方法(删除目标、刷新、清理、重建、maven 安装...)并且您意识到 Eclipse 的行为不合理...

现在:检查是否没有错误提示它可能是与测试有关的插件(任何插件)。

就我而言:

我删除了 EclEmma。 它开始工作了……

花了几个小时试图猜测它!

【讨论】:

【参考方案24】:

请确保Java Build Path选项卡中的输出文件夹设置如下,这将确定.class文件的生成位置。然后清理项目。

【讨论】:

【参考方案25】:

上述解决方案对我不起作用。

我刚刚关闭并重新打开了我的 IDE。

然后错误消失了,现在可以正常工作了。

【讨论】:

【参考方案26】:

您可能需要结合使用上述方法来解决此问题。当我这样做时,我通常会收到此错误

mvn clean install

并看到一个编译错误,阻止我的测试完全编译。

假设以上解决的问题已经解决,尝试点击项目,清理,清理包含你要运行的测试的项目。还要确保选中自动生成。

【讨论】:

以上是关于Eclipse 中的 JUNIT 测试类 - java.lang.ClassNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

在Eclipse中使用JUnit4进行单元测试(中级篇)

JUnit:通过 eclipse 和 maven 测试运行。速度差别很大,为啥?

如何在Eclipse中自动生成接口和JUnit测试类

eclipse进行Junit测试

Eclipse / Maven:JUnit测试在运行时未编译

使用 plexus-compiler-eclipse 编译 java 类并将其作为 JUnit 测试运行