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

时间:2011-04-19 12:26:11

标签: java eclipse junit4 classnotfoundexception

我正在尝试运行我的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)

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

感谢。

26 个答案:

答案 0 :(得分:38)

在您的类路径中找不到

ConfigurationManagerTest。确保类路径上有ConfigurationManagerTest.class文件。

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

假设您已将测试类放在单独的文件夹中,请确保它显示在“Package Explorer”视图中(而不是“Navigator”视图)。

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

答案 1 :(得分:22)

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

编辑:这篇文章在15.11.2017获得了最后的加分。所以,问题(和解决方案)仍然存在。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:3)

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

  1. 在课程编辑器中保存课程。
  2. 从eclipse项目资源管理器中删除了违规类。
  3. 重新创建了课程。
  4. 宾果!我现在可以进行测试了!

答案 4 :(得分:2)

检查属性 - &gt; java构建路径 - &gt;库。应该没有错误,在我的情况下,maven中有错误。一旦我把所需的罐子放在maven仓库中,它就可以了。

答案 5 :(得分:2)

我遇到了这个问题,弄清楚什么是错的是有点棘手。该项目有一个带有一些错误的依赖项目,它阻止了构建执行。当我删除此依赖项问题时,项目按预期构建。

Ps。:我正在研究一个有很多编译错误的项目,因为我们正在移植一个从Delphi转换为Java的应用程序,所以我一开始并不关心编译错误,这就是为什么它需要我有时间找出问题。

答案 6 :(得分:2)

我尝试了这里描述的所有答案但没有成功,但发现这个thread,其中slomek以一种非常简单的方式解决了问题。只需去项目 - &gt;属性 - &gt; java构建路径。然后通过向上击中右下方将Junit移动到顶部。然后一切都很好。

答案 7 :(得分:1)

另一种可以展现出来的方式就是如果你有一个Eclipse没有告诉你的构建错误。如果编译单元测试失败,则没有.class文件,您将获得ClassNotFoundException。

在我的情况下,缺少第三方jar文件。当我运行测试时,我得到一个弹出窗口,表示&#34;错误存在于所需的项目中#34;。我正在处理一个庞大的项目,而且总是得到那条消息,因为某些来源不适用于eclipse(长篇故事)。它也没有说出错误是什么。所以我点击&#34;继续&#34;然后我得到了例外。

一旦我意识到发生了什么,就可以通过在Run - &gt;下的类路径中添加缺少的jar来轻松修复。调试配置......

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

答案 8 :(得分:1)

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

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

答案 9 :(得分:1)

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

  1. 更改测试的输出文件夹
  2. 为将从Maven运行test-compile的项目创建自定义构建器
  3. 在项目构建路径
  4. 的“订单和导出”列表中将Maven依赖项移到更高位置

    还有很多很多,但我找到的工作方式如下:关闭开发环境。从我的本地Maven存储库中删除项目使用的jar。打开IDE。建立项目。运行测试。

    经过几个小时的敲击我的键盘并遵循建议的解决方案,这个有效!

答案 10 :(得分:0)

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

我只是通过关闭并重新打开IDE来重新启动它。

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

答案 11 :(得分:0)

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

enter image description here

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

  • 假设您尝试了所有合理的操作(删除目标,刷新,清理,重建,maven安装...),并且您意识到Eclipse的行为不合理...
  • 现在:检查是否没有错误提示它可以是与测试有关的插件(任何插件)。

  • 在我的情况下:

    • 我删除了EclEmma。
    • 它开始工作...

花了几个小时去猜测!!

答案 14 :(得分:0)

我遇到了这个问题,就我而言,问题出在编译上,我在使用maven,而测试类却没有编译。

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

您可能需要将以上各项组合在一起才能解决此问题。我通常会在收到此错误

mvn clean install

,看到一个编译错误,导致我的测试无法完全编译。

假定已解决上述问题,请尝试单击“项目”,然后单击“清理”,然后清理包含要运行的测试的项目。还要确保选中“自动生成”。

答案 18 :(得分:0)

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

最后,我试过: 右键单击(Web模块)项目 - &gt;构建路径 - &gt;来源标签 - &gt;链接源 - &gt;添加了src文件位置(客户端模块&#39;)

多数民众赞成!它就像一个魅力 希望它有所帮助

答案 19 :(得分:0)

在“Package Explorer”视图中,右键单击您的测试类,然后“Build Path”&gt;&gt;“Include”,它应该没问题。

答案 20 :(得分:0)

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

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

如果解决方案似乎都不起作用,只需删除工作区中创建的.metadata文件夹即可。这会产生额外的导入项目的开销和你已经完成的各种配置,但这些肯定会解决这些问题。

希望这些有所帮助。

答案 21 :(得分:0)

如果您有maven项目,请尝试运行:

mvn clean compile

然后在eclipse clean&amp;建立你的项目。

答案 22 :(得分:0)

另一种变化。
不知何故,我以前工作的测试类似乎是从其他位置运行的;我运行测试时,我的编辑不会执行。

我发现$ {project_loc} src / test / java文件的输出文件夹不是我的预期。它无意中被设置为$ {project_loc}目标/类。 我在项目属性,Java Build Path,Source选项卡中正确设置了它。

答案 23 :(得分:0)

在资源管理器中右键单击项目:构建路径 - &gt;订单和出口 - &gt;选择JRE System Library [jdk]并单击Bottom按钮。

答案 24 :(得分:0)

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

  1. 您只需编辑主项目文件夹中的文件.project即可。使用正确的XML编辑器,否则您将从Eclipse获得fatal error无法打开此项目的统计信息。
  2. 我通过将此Java添加到<nature>org.eclipse.jdt.core.javanature</nature>来实现我的项目性质<natures></natures>
  3. 然后我正确地将这些行添加到<buildCommand><name>org.eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand>缩进到<buildSpec></buildSpec>
  4. Run as JUnit ... 成功

答案 25 :(得分:0)

盖伊回答上面的一个变种,涉及额外的建造者。假设您已配置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构建器,还要检查已配置的目标,以进行清理,自动,手动和后清理构建,以确保调用构建单元测试的目标。