运行JUnit测试时找不到类异常

时间:2012-07-08 06:06:00

标签: java eclipse junit

我在Eclipse中运行JUnit测试时遇到此错误:

Class not found com.myproject.server.MyTest
java.lang.ClassNotFoundException: com.myproject.server.MyTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.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:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    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)

我尝试在类路径中添加JUnit库,尽管我正在使用maven,而JUnit库是POM依赖项。

我已经尝试过清理项目并使用Eclipse的JUnit插件创建了一个新的JUnit测试用例,但仍然遇到同样的错误。

25 个答案:

答案 0 :(得分:96)

这似乎是因为当你使用mvn clean compile时只编译源代码(我正在使用maven 3.1.0所以我不确定它是否总是这样)。

如果你运行mvn test,测试代码也会编译,但它会运行测试(如果你试图通过Eclipse运行它们,可能不会立即进行测试。)解决这个问题的方法是每当执行test-compile时,将mvn clean添加到Maven命令序列中。例如,您将运行mvn clean compile test-compile

答案 1 :(得分:90)

我的测试遇到了类似的问题,并且发现在Web上的某个地方,您必须转到项目属性中的 Build Path 并移动 Maven Dependencies < em> JRE系统库。这似乎对我有用。

答案 2 :(得分:18)

我遇到了同样的问题,我可以使用@ slomek&#39; s answer来修复它,但此后问题重新出现。

我最终通过将项目的输出文件夹添加到JUnit测试的运行配置来修复它。步骤是:

  • Project properties -> Java Build Path -> Default output folder找到您项目的输出文件夹
    • 通常这是<project-folder>/bin
  • 转到Run -> Run Configurations...
  • 点击单元测试的运行配置,然后点击Classpath标签
  • User Entries下明确添加项目的输出文件夹 - 即使项目已包含在那里
    • 点击Advanced -> Add folder添加输出文件夹

此问题可能是由于Eclipse中奇怪的项目设置 - 例如导入为单个项目/文件夹的嵌套maven项目的源文件夹(至少是我的项目设置方式)。

答案 3 :(得分:13)

如果仅在Eclipse中出现此问题,则执行命令Project - &gt;选择项目上的清洁......可能有所帮助。

答案 4 :(得分:11)

在尝试了所有内容后没有任何改进之后,我通过重新启动Eclipse解决了我的问题

答案 5 :(得分:3)

在我的情况下,我有一个错误的maven目录结构。

应该是这样的:

/ src / test / java / com.myproject.server.MyTest

在我解决之后 - 一切都像魅力一样。

答案 6 :(得分:1)

就我而言,从构建路径配置更改Maven依赖关系的顺序对我不起作用。我从“运行”配置更改了其顺序。
请按照以下步骤操作:
•转到运行->运行配置...
•单击单元测试的运行配置,然后单击“类路径”选项卡。
•选中使用临时JAR指定类路径(以避免类路径长度限制)。
可能就足够了,并且您的测试有效。您应该尝试一下,所以按运行按钮。如果没有用。再次按照之前的所有步骤操作,而无需按“运行”按钮,请转到下一步。
•在“用户条目”的子分支中,将“ Maven依赖关系”移到项目或测试类上方。
•单击运行按钮。

答案 7 :(得分:1)

早些时候,在这种情况下,我总是做mvn eclipse:eclipse并重新启动我的Eclipse并且它有效。迁移到GIT后,它停止了为我工作,这有点奇怪。

这里的基本问题是Eclipse先生找不到编译的类。 然后,我将输出文件夹设置为Project / target / test-classes,默认情况下由mvn clean install生成而不跳过测试并继续执行以下解决方法:

选项1:为每个测试用例设置类路径

Eclipse - &gt;运行 - &gt;运行配置 - &gt;在JUnit-&gt;下选择mytest - &gt;在classpath选项卡下 - >选择用户条目 - >高级 - >添加文件夹 - &gt;选择 - &gt;应用 - >运行

选项2:创建类路径变量并将其包含在所有测试用例的类路径中

Eclipse - &gt; Windows - &gt;类路径变量 - &gt; New-&gt; [名称:Junit_test_cases_cp |路径:] - &gt;好的 然后去 Eclipse-&gt;运行 - &gt;运行配置 - &gt; JUnit-&gt;选择mytest - &gt;在classpath选项卡下 - &gt;选择用户条目 - &gt;高级 - &gt;添加类路径变量 - &gt;选择Junit_test_cases_cp-&gt; ok - &GT;适用 - &gt;运行

在网上尝试所有建议后,这是目前唯一可行的方法。

答案 8 :(得分:1)

在我的情况下,只有后续步骤帮助我解决了这个问题:

  1. 项目 - &gt;属性 - &gt;运行/调试设置。
  2. In&#34;启动&#39; .....&#39;&#34;选择课程/项目
  3. 编辑 - &gt; Classpath - &gt; &#34;恢复默认条目&#34;

答案 9 :(得分:1)

我的Gradle项目遇到了同样的问题,测试SourceSet有两个资源目录。

此代码段来自main-module.gradle,并将资源目录添加到测试SourceSet:

sourceSets {
    test {
        resources {
            srcDir('../other-module/src/test/resources')
        }
    }
}

这样做我有两个与项目主模块的测试SourceSet相关的资源目录:

../其他模块/ SRC /测试/资源 src / test / resources(相对于主模块文件夹,由java插件自动添加)

我发现如果我在两个源目录中都有两个同名文件,那么进程资源阶段就会出错。结果,没有开始编译,因此没有.class被复制到bin目录中,其中JUnit正在寻找类。 ClassNotFoundException消失了,只是重命名了两个文件中的一个。

答案 10 :(得分:0)

请检查是否已将junit4添加为依赖项。

例如

difference

答案 11 :(得分:0)

对于不使用maven的项目:这对我有用https://ihategeek.wordpress.com/2012/04/18/eclipse-junit-test-class-not-found/

在Order的底部添加jre和src项目,并在构建路径中导出

答案 12 :(得分:0)

对我来说,我不得不将项目x / src / test / java /放在“ java build path”中“ order and export”的底部

enter image description here

答案 13 :(得分:0)

我通过运行Maven更新解决了我的问题。 右键单击项目> Maven>更新项目

答案 14 :(得分:0)

似乎是编译问题。作为Maven测试运行项目,然后作为JUnit测试运行。

答案 15 :(得分:0)

进行一些虚拟更改并保存测试类可以解决此问题。它将自动构建.class

答案 16 :(得分:0)

我也遇到过同样的问题。我通过删除外部junit jar依赖性解决了该问题,该依赖性是通过从Internet外部下载添加的。但是后来我去了project-> properties-> build path-> add library-> junit->选择了版本(例如junit4)-> apply。

它会自动添加依赖项。它解决了我的问题。

答案 17 :(得分:0)

NoClassDefFoundError实际上意味着它不能初始化该类。它与找到课程没有任何关系。在空字符串上调用trim()时出现此错误。

JUnit不会显示NullPointerException。正常运行时,字符串不为null,因为 我正在从无法用于测试的属性文件中获取字符串。

我的建议是从课程中删除部分内容,直到测试开始通过。然后,您可以确定出现错误的行。

更多信息在这里: https://stackoverflow.com/a/6352584/1308453https://stackoverflow.com/a/6352584/1308453

答案 18 :(得分:0)

也可能是由于“[ERROR]在这种环境中没有提供编译器。也许你在JRE而不是JDK上运行?”

答案 19 :(得分:0)

检查您的项目是否作为Maven项目打开,而不仅仅是常规Java项目。实际上这是一个明智的选择,但这正是您可能会错过它的原因。

答案 20 :(得分:0)

值得一提的另一个答案是,如果你正在使用eGit,并且你的类路径因为像Clover这样的测试覆盖工具而得到更新,那么有时候会有一个清理打嗝并不能完全删除{{1 }}

基本上,我使用了Eclipse的错误日志视图,确定了在清理过程中导致问题的原因,导航到源目录,并手动删除了/path/to/git/repository/<project name>/bin/目录。完成后我回到Eclipse并刷新(<project name>/bin)我的项目,错误就消失了。

答案 21 :(得分:0)

1 mvn eclipse:eclipse

2-项目清理所有项目

3-重启

答案 22 :(得分:0)

这些步骤对我有用。

  • 删除本地Maven存储库的内容。
  • 在命令行中运行 mvn clean install 。 (cd到pom目录)。
  • 在Eclipse中构建项目。

答案 23 :(得分:0)

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

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

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

希望这些有所帮助。

答案 24 :(得分:-5)

您可能忘记将主要类测试用例类放入 / SRC /测试/ JAVA。检查一次。