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

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)

有没有关于如何修复这个问题的想法?

谢谢。


18
尝试清理并构建您的项目。 - Harry Joy
1
尝试了很多次,我一直得到相同的错误。 - Mouna Cheikhna
3
在Eclipse中打开运行配置窗口,选择你运行的单元测试,进入“classpath”选项卡:在这里你可以检查实际的类路径。 - Stijn Geukens
谢谢,我在classpath选项卡中看到了一个错误:[JRE]:JRE与工作区不兼容。类文件兼容性:1.6,也许这是原因? - Mouna Cheikhna
刷新您的项目,然后执行清理和构建。 - riteshkasat
显示剩余2条评论
27个回答

1
另一种可能的情况是,当您遇到Eclipse没有告诉您的构建错误时。如果编译单元测试失败,则没有.class文件,您将收到ClassNotFoundException。
在我的情况下,缺少第三方jar文件。当我运行测试时,弹出一个窗口显示“所需项目中存在错误”。我使用一个巨大的项目,并且我总是会收到这个消息,因为有些源对于eclipse不可用(长话短说)。而且它也没有说错了什么。所以我点击“继续”,然后我就得到了异常。
一旦我意识到发生了什么,通过在“运行” -> “调试配置…”下添加缺失的jar到类路径中很容易解决。
我不确定如何最好地检测或防止这种情况发生,除了在出现问题时意识到这种可能性并回顾您最近的更改以查找可能出错的内容。

0
一个基于Guy上面回答的变体,涉及到额外的构建器。假设您已经配置了一个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构建器,请还要检查清除、自动、手动和清理后构建的配置目标,以确保调用构建单元测试的目标。

0
如果您有一个Maven项目,请尝试运行以下命令:
mvn clean compile

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


0
我之所以收到这个错误,是因为我最近创建了一个新的工作区,而我的“已安装的 JREs”没有正确设置。请确保在 首选项 -> Java -> 已安装 JRE 中选择了 JDK 的根文件夹。对于我来说,在新的工作区中默认选择的是某个原因的 JRE。

0
在“包资源管理器”视图中,右键单击您的测试类,然后选择“构建路径”>>“包含”,这样就可以了。

0

你确定你的测试类在构建文件夹中吗? 你正在一个单独的JVM(fork=true)中调用junit,因此在该调用期间工作文件夹可能会改变,并且由于build是相对路径,这可能会导致问题。

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


0

我曾经遇到过这个问题,在我的情况下,问题出在编译上,我使用的是Maven,测试类没有编译。

我通过执行Maven安装(它会编译所有文件)来解决了这个问题,你也可以检查其他原因,例如如果你的“运行配置”跳过测试以节省时间。


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

enter image description here


0

我知道这个问题早已经有答案了,但对我并没有起到修复作用。我只是从Build Path设置中的源代码中删除了所有内容,然后重新添加它们。


0
在资源管理器中右键单击项目:构建路径 -> 顺序和导出 -> 选择 JRE 系统库 [jdk] 并单击底部按钮。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接