运行 JUnit 测试时找不到类异常
Posted
技术标签:
【中文标题】运行 JUnit 测试时找不到类异常【英文标题】:Class Not Found Exception when running JUnit test 【发布时间】:2012-07-08 00:37:35 【问题描述】:在 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 测试用例,但仍然遇到同样的错误。
【问题讨论】:
在编译所有测试类后尝试运行mvn clean test
你能检查一下 com.myproject.server.MyTest 是否在 bin 文件夹中吗?我的意思是如果由于编译或构建路径错误而未编译,您将收到此错误。
你是在测试一个类还是整个项目?
Eclipse - java.lang.ClassNotFoundException的可能重复
在我的情况下,使用 Maven 运行测试是可行的,但是如果我右键单击一个测试类并选择 Run As -> JUnit Test,它会报告 ClassNotFoundException。我通过右键单击项目并转到 Properties -> Builders 然后将 Maven Project Builder 移动到 Java Builder 上方来修复它
【参考方案1】:
这似乎是因为当您使用 mvn clean compile
时只有源代码正在编译(我使用的是 maven 3.1.0,所以我不确定它是否总是这样)。
如果您运行mvn test
,测试代码也会编译,但随后它会运行测试(如果您尝试通过 Eclipse 运行它们,这可能不会立即可取。)解决此问题的方法是添加每当您执行mvn clean
时,将test-compile
添加到您的Maven 命令序列。例如,您将运行mvn clean compile test-compile
。
【讨论】:
我曾经发生过这种情况,斯洛梅克的回答有效,然后同样的错误再次发生,所以我也不得不尝试这个。它现在又可以正常工作了,所以为了安全起见,您可能需要同时执行这两项操作。 谢谢,它对我有用。但就我而言,它直到关闭并在 Eclipse 中重新打开项目才起作用。 简单地说,做一个'mvn clean test-compile',然后在eclipse中运行你的Junit测试。它对我有用。谢谢。 如果那是一个蚂蚁项目怎么办【参考方案2】:我的测试遇到了类似的问题,并在 Web 的某个地方发现,您必须转到项目属性中的 Build Path 并将 Maven 依赖项 移到上方 JRE 系统库。这似乎对我有用。
【讨论】:
谢谢这解决了我的问题。当我尝试运行它时,实际的测试是得到类未找到错误。我认为这可能是在添加额外的 mvn 构建目标之前最好的第一步。 此方法在this 帖子中通过屏幕截图进行了描述(以防上面@slomek 的回答中不清楚步骤) 我无法在 Eclipse Mars 2 中将 Maven 托管依赖项移动到 JRE 系统库上方,但我可以右键单击项目并转到属性 -> 构建器,然后将 Maven 项目构建器移动到 Java 构建器上方它对我有用。 我尝试了以上所有方法,但没有成功,我也无法移动关于 JRE 系统库的 Maven 依赖项,但它位于库选项卡下。然后我去了 Build Path -> Order & Export -> as 能够将 Maven Dependencies 移动到 JRE System 库之上。然后我构建了项目并运行了一个 Maven 安装,然后测试运行成功。 就我而言,从构建路径配置更改 Maven 依赖项的顺序对我不起作用。我从运行配置更改了它的顺序。有效。对于这些步骤,请阅读我的答案。【参考方案3】:我遇到了同样的问题,我可以使用@slomek 的answer 修复它,但之后问题又出现了。
我最终通过将我的项目的输出文件夹添加到 JUnit 测试的运行配置来修复它。步骤是:
从Project properties -> Java Build Path -> Default output folder
找到您项目的输出文件夹
通常是<project-folder>/bin
转到Run -> Run Configurations...
点击单元测试的运行配置,点击Classpath
标签
在User Entries
下显式添加项目的输出文件夹 - 即使项目已经包含在其中
点击Advanced -> Add folder
添加输出文件夹
这个问题可能是由于 Eclipse 中奇怪的项目设置造成的 - 例如包含作为单个项目/文件夹导入的嵌套 maven 项目的源文件夹(至少我的项目是这样设置的)。
【讨论】:
非常感谢;我有这个问题。你的修复对我有用;前两名没有。投票赞成。 绝对精彩!多年来一直在为此挠头。谢谢! 非常感谢。我自己永远无法解决这个问题。我的是一个 Ant 项目,但您的解决方案有效。【参考方案4】:如果此问题仅在 Eclipse 中出现,在选定项目上执行命令 Project -> Clean... 可能会有所帮助。
【讨论】:
谢谢 - 它实际上对我有用 - JAVE EE eclipse gradlew 确保我们在清理时选择特定项目,而不是全部。【参考方案5】:在这里尝试了一切都没有改善后,我通过重新启动 Eclipse 解决了我的问题
【讨论】:
【参考方案6】:我通过运行 maven update 解决了我的问题。 右键单击项目您的项目 > Maven > 更新项目
【讨论】:
这是我一直在做的事情,它解决了问题..【参考方案7】:在我的例子中,我有一个错误的 Maven 目录结构。
应该是这样的:
/src/test/java/ com.myproject.server.MyTest
在我修复之后 - 一切都像魅力一样。
【讨论】:
【参考方案8】:就我而言,只有后续步骤可以帮助我解决此问题:
-
项目->属性->运行/调试设置。
在“为 '.....' 启动配置”中选择类/项目
编辑 -> 类路径 -> “恢复默认条目”
【讨论】:
谢谢!!只有这个帮助了我!!【参考方案9】:我在调试 Junits 的 Eclipse Helios 上遇到了类似的问题。我的问题略有不同,因为我能够成功运行 Junits,但是当我在调试相同的 JUNIT 时遇到 ClassNotFoundException。
我在 ***.com 和其他地方的论坛中尝试了各种不同的解决方案,但似乎没有任何效果。在为这些问题敲了近两天之后,我终于找到了解决方案。
如果这些解决方案似乎都不起作用,只需删除在您的工作区中创建的 .metadata 文件夹。这会增加导入项目和您所做的各种配置的额外开销,但这些肯定会解决这些问题。
希望这些有所帮助。
【讨论】:
请注意...这样做需要您重建环境。因此,虽然它可以解决,但请注意您将要做什么......【参考方案10】:之前,在这种情况下,我总是执行 mvn eclipse:eclipse
并重新启动我的 Eclipse 并且它工作正常。迁移到 GIT 后,它不再为我工作,这有点奇怪。
这里的基本问题是Eclipse先生没有找到编译的类。
然后,我将输出文件夹设置为 Project/target/test-classes,默认情况下由 mvn clean install
生成,不跳过测试并继续以下解决方法:
选项 1:为每个测试用例设置类路径
Eclipse ->运行->运行配置->在JUnit下->选择mytest->在类路径选项卡下->选择用户条目->高级->添加文件夹->选择->应用->运行
选项 2:创建类路径变量并将其包含在所有测试用例的类路径中
Eclipse ->Windows ->类路径变量 ->New->[名称:Junit_test_cases_cp |路径:]->确定 然后去 Eclipse->运行->运行配置->JUnit->选择mytest->在类路径选项卡下->选择用户条目->高级->添加类路径变量->选择Junit_test_cases_cp->ok->应用->运行
在尝试了所有在线建议后,这是目前唯一对我有用的方法。
【讨论】:
【参考方案11】:就我而言,从构建路径配置更改 Maven 依赖项的顺序对我不起作用。我从运行配置更改了它的顺序。 请按以下步骤操作: • 转到运行 -> 运行配置... • 单击单元测试的运行配置,然后单击“类路径”选项卡。 • 检查使用临时 JAR 指定类路径(以避免类路径长度限制)。 可能就足够了,您的测试有效。你应该试试,所以按下运行按钮。如果它不起作用。再次执行所有前面的步骤,无需按“运行”按钮,转到下一步。 • 在用户条目的子分支中,将 Maven 依赖项移到您的项目或测试类之上。 • 单击运行按钮。
【讨论】:
【参考方案12】:这些步骤对我有用。
删除本地 Maven 存储库的内容。 在命令行中运行 mvn clean install。 (cd 到 pom 目录)。 在 Eclipse 中构建项目。【讨论】:
【参考方案13】:1- mvn eclipse:eclipse
2-项目清理所有项目
3-重启
【讨论】:
【参考方案14】:另一个值得一提的答案是,如果您使用的是 eGit,并且您的类路径会因为诸如 Clover 之类的测试覆盖工具而更新,有时会出现清理打嗝并没有完全删除 /path/to/git/repository/<project name>/bin/
的内容
基本上,我使用了 Eclipse 的错误日志视图,确定了在清理工作期间导致问题的原因,导航到源目录,并手动删除了 <project name>/bin
目录。完成后,我回到 Eclipse 并刷新 (F5
) 我的项目,错误就消失了。
【讨论】:
【参考方案15】:也可能是由于“[错误]此环境中未提供编译器。也许您在 JRE 而不是 JDK 上运行?”
【讨论】:
【参考方案16】:我在一个带有两个资源目录的测试 SourceSet 的 Gradle 项目中遇到了同样的问题。
这个 sn-p 来自一个 main-module.gradle 并将一个资源目录添加到测试 SourceSet:
sourceSets
test
resources
srcDir('../other-module/src/test/resources')
这样做我有两个与项目主模块的测试SourceSet相关的资源目录:
../other-module/src/test/resources src/test/resources(相对于main-module文件夹,由java插件自动添加)
我发现如果我在两个源目录中都有两个同名的文件,那么在进程资源阶段出现了问题。结果,没有开始编译,因此没有将 .class 复制到 JUnit 正在查找类的 bin 目录中。 ClassNotFoundException 只是重命名两个文件之一就消失了。
【讨论】:
【参考方案17】:NoClassDefFoundError 确实意味着它无法初始化类。它与查找课程无关。在空字符串上调用 trim() 时出现此错误。
JUnit 不会显示 NullPointerException。正常运行时字符串不为空,因为 我正在从不可用于测试的属性文件中获取字符串。
我的建议是在你的测试开始通过之前从类中删除部分。然后你可以确定哪一行给出了错误。
【讨论】:
【参考方案18】:这似乎是编译问题。将项目作为 Maven 测试运行,然后作为 JUnit 测试运行。
【讨论】:
【参考方案19】:对于不使用 maven 的项目:这对我有用 https://ihategeek.wordpress.com/2012/04/18/eclipse-junit-test-class-not-found/
在Order底部添加jre和project src并在构建路径中导出
【讨论】:
【参考方案20】:请检查您是否添加了 junit4 作为依赖项。
例如
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
【讨论】:
【参考方案21】:对我来说,我不得不将项目 x/src/test/java/ 放在“java build path”中“order and export”的底部
【讨论】:
【参考方案22】:检查您的项目是否作为 Maven 项目打开,而不仅仅是常规 Java 项目。实际上很简单,但这正是您可能会错过它的原因。
【讨论】:
【参考方案23】:我也遇到过同样的问题。我通过删除外部 JUnit jar 依赖项解决了这个问题,该依赖项是通过从 Internet 外部下载添加的。但是后来我去了项目->属性->构建路径->添加库->junit->选择了版本(ex junit4)->应用。
它自动添加了依赖项。它解决了我的问题。
【讨论】:
【参考方案24】:进行一些虚拟更改并保存测试类可以解决问题。它会自动构建.class
【讨论】:
【参考方案25】:您可能忘记将 Main 类 和 Test Case 类 放入 /src/test/java.检查一次。
【讨论】:
java.lang.ClassNotFoundException 在类已经编译但由于类路径设置不正确而在运行时出现。以上是关于运行 JUnit 测试时找不到类异常的主要内容,如果未能解决你的问题,请参考以下文章
测试时为啥会找不到测试类 就是运行JUnit 出现找不到测试类的问题