运行 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 测试时找不到类异常的主要内容,如果未能解决你的问题,请参考以下文章

javac编译时找不到文件的问题和运行项目找不到指定类问题

测试新模型时找不到 Eloquent 类

测试时为啥会找不到测试类 就是运行JUnit 出现找不到测试类的问题

在 IDEA 中使用 JUnit Runner 时找不到 Spring Profile

扩展抽象测试类时找不到测试类

运行JUnit 出现找不到测试类的问题