运行 eclipse 中的 junit 测试时出现 ClassNotFoundException

ClassNotFoundException when running a junit test in eclipse

我真的很绝望为什么会出现这个异常?我正在 class MyTestIT 运行ning 测试。还有什么 class 没有找到? Class 我 运行...我尝试在 Eclipse 中清理并再次构建它,但没有成功

 Class not found it.mytest.MyTestIT
    java.lang.ClassNotFoundException: it.mytest.MyTestIT
        at java.net.URLClassLoader.run(URLClassLoader.java:366)
        at java.net.URLClassLoader.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:685)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:421)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

PS:我忘了补充说它一直在工作。但是今天刚开eclipse,这里没法运行测试。使用 Maven 它仍然有效

你能在这里写MyTestIt class吗?如果没有,请尝试查看您的代码是否存在这些问题之一。

https://docs.oracle.com/javase/7/docs/api/java/lang/ClassNotFoundException.html

似乎是某种奇怪的日食问题,我们很难诊断,但蛮力方法是这样的: 如果你的项目有 Maven,只需从你的 Eclipse 工作区中删除你的项目(不要删除文件),然后从命令行执行:

mvn clean install eclipse:clean eclipse:eclipse

然后将您现有的项目重新导入回您的 Eclipse 工作区。在此程序后应该可以正常工作。

编辑

启动您的测试并切换到调试透视图。您将在 Debug 视图中看到您最近的启动。 Select 它并转到其属性(快捷键:Alt+Enter)。在 "command line" 部分,您应该看到 Eclipse 用于启动单元测试的确切命令。检查 class 路径是否正常。它可能只是一些奇怪的日食项目设置。 Maven 将为您的 运行 测试使用不同的 class 路径,这可能是 Eclipse 在错误的目录中查找您的单元测试。如果您 class 在 classspath 中,那么它一定可以工作。

我 运行 在同时使用 Eclipse 和 mvn-on-the-command-line 处理项目时遇到了这个问题。

命令行启动的 mvn clean 删除了 ./target/ 目录,Eclipse 的 JUnit 支持也依赖该目录来查找已编译的 JUnit 测试 classes。

我首先从命令行通过 运行 mvn test 解决了基于 Eclipse 的 ClassNotFoundException。从此Eclipse又找到了测试class

从 Eclipse 项目中删除以下 files/folders:

.项目 .类路径 .设置

然后使用"Import -> Existing Maven Projects"重新导入项目。

这应该与 Peter 的回答具有相同的效果,只是不需要转到命令行。

检查项目是否正确构建。您可以在问题选项卡(Windows --> 显示视图 --> 问题)中进行检查。如果你看到 "project can not build due to some error"。然后先尝试解决错误。

检查您的 Project/bin 文件夹,是否有您的 .class。如果不是,则项目未正确构建。

进行清理构建。确保具有 junit classes.

的项目没有构建错误

这是一个常见问题,其中 junit 从 maven 测试 运行 成功,但从 eclipse junit 测试 运行ner 失败。

一个解决方案是手动添加一个相对较新的 junit jar 的外部本地副本到 eclipse 类路径的顶部 在您的项目属性构建路径或单元测试中运行时间配置。例如:

  • 单击:项目 - 属性 - Java 构建路径 - 库 - 添加外部 JAR:
  • Select 相对较新版本的本地 junit jar 在您的机器上
  • 单击 "Order and Export" 选项卡 - 将 junit jar 移到顶部。 (申请并关闭)

您现在应该可以右键单击测试并 运行 作为 junit 测试成功。

这据称已在 2017 年作为 eclipse 错误修复"photon":

https://bugs.eclipse.org/bugs/show_bug.cgi?id=525844

然而,2018/2019 年仍有数十篇帖子仍在发生。

上面的修复是一种变通方法——它不是 Eclipse 用户应该知道的标准配置设置。

其他一些变通办法对我不起作用:

  • 删除 .project/.classpath/.settings 等元文件
  • 创建新的 eclipse 工作区
  • 运行ning mvn eclipse 目标
  • 运行宁组合:多个项目清理,多个 mvn 清理,重新打开 eclipse 两次

如果此问题仅发生在 Eclipse 中,对所选项目执行命令项目 -> 清理... 可能会有所帮助。