ChatGPT解决这个技术问题 Extra ChatGPT

运行 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)

尽管我使用的是 maven,但我尝试在类路径中添加 JUnit 库,并且 JUnit 库位于 POM 依赖项中。

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

尝试运行 mvn clean test,一旦它将编译所有测试类
你能检查一下 com.myproject.server.MyTest 是否在 bin 文件夹中吗?我的意思是,如果由于编译或构建路径错误而未编译,您将收到此错误。
你是在测试一个类还是整个项目?
在我的情况下,使用 Maven 运行测试是可行的,但是如果我右键单击一个测试类并选择 Run As -> JUnit Test,它会报告 ClassNotFoundException。我通过右键单击项目并转到 Properties -> Builders 然后将 Maven Project Builder 移动到 Java Builder 上方来修复它

k
kryger

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

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


我曾经发生过这种情况,并且 slomek 的答案有效,然后同样的错误再次发生,所以我也不得不尝试这个。它现在又可以正常工作了,所以为了安全起见,你可能想要做这两件事。
谢谢,它对我有用。但就我而言,它直到关闭并在 Eclipse 中重新打开项目才起作用。
简单地说,做一个'mvn clean test-compile',然后在eclipse中运行你的Junit测试。它对我有用。谢谢。
如果那是一个蚂蚁项目怎么办
s
slomek

我的测试遇到了类似的问题,并且在 Web 的某个地方发现,您必须在项目属性中转到构建路径并将 Maven 依赖项移动到 JRE 系统库之上。这似乎对我有用。


谢谢这解决了我的问题。当我尝试运行它时,实际的测试是得到类未找到错误。我认为这可能是在添加额外的 mvn 构建目标之前最好的第一步。
此方法在 this 帖子中通过屏幕截图进行了描述(以防上述@slomek 的回答中的步骤不清楚)
我无法在 Eclipse Mars 2 中将 Maven Managed Dependencies 移动到 JRE System Library 上方,但我可以右键单击该项目并转到 Properties -> Builders,然后将 Maven Project Builder 移动到 Java Builder 上方,它对我有用。
我尝试了以上所有方法,但没有成功,我也无法移动关于 JRE 系统库的 Maven 依赖项,但它位于库选项卡下。然后我去了 Build Path -> Order & Export -> as 能够将 Maven Dependencies 移动到 JRE System 库之上。然后我构建了项目并运行了 Maven 安装,然后测试成功运行。
就我而言,从构建路径配置更改 Maven 依赖项的顺序对我不起作用。我从运行配置更改了它的顺序。有效。对于这些步骤,请阅读我的答案。
C
Community

我遇到了同样的问题,我可以使用@slomek 的 answer 修复它,但之后问题又出现了。

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

从 Project properties -> Java Build Path -> Default output folder 找到项目的输出文件夹通常是 /bin

通常这是 /bin

转到运行-> 运行配置...

单击单元测试的运行配置,然后单击 Classpath 选项卡

在用户条目下显式添加项目的输出文件夹 - 即使项目已经包含在其中单击高级 -> 添加文件夹以添加输出文件夹

单击高级 -> 添加文件夹以添加输出文件夹

这个问题可能是由于 Eclipse 中奇怪的项目设置造成的 - 例如,源文件夹中包含作为单个项目/文件夹导入的嵌套 maven 项目(至少我的项目是这样设置的)。


太感谢了;我有这个问题。你的修复对我有用;前两名没有。投票赞成。
绝对精彩!多年来一直在为此挠头。谢谢!
太感谢了。我自己永远无法解决这个问题。我的虽然是一个 Ant 项目,但您的解决方案有效。
j
johanwannheden

如果此问题仅在 Eclipse 中发生,则在选定项目上执行命令 Project -> Clean... 可能会有所帮助。


谢谢 - 它实际上对我有用 - JAVE EE eclipse gradlew
确保我们在清洁时选择特定项目,而不是全部。
B
Berit Larsen

在没有任何改进的情况下在这里尝试了一切之后,我通过重新启动 Eclipse 解决了我的问题


A
Azianese

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


这就是我一直在做的事情,它解决了这个问题..
I
ITisha

就我而言,我有一个错误的 Maven 目录结构。

应该是这样的:

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

在我修好之后 - 一切都像魅力一样。


R
Roman Romaniuk

就我而言,只有接下来的步骤才能帮助我解决此问题:

项目-> 属性-> 运行/调试设置。在“为'.....'启动配置”中选择类/项目编辑->类路径->“恢复默认条目”


谢谢!!只有这个帮助了我!!
N
Nayan

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

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

如果这些解决方案似乎都不起作用,只需删除在您的工作区中创建的 .metadata 文件夹。这会增加导入项目和您所做的各种配置的额外开销,但这些肯定会解决这些问题。

希望这些有所帮助。


请注意...这样做将需要您重建环境。因此,虽然它可以解决,但请注意您将要做什么......
A
Aakash Goyal

早些时候,在这种情况下,我总是执行 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 | path : ]->ok 然后去 Eclipse->Run ->Run Configurations ->JUnit->select mytest ->under classpath tab ->Select User Entries->Advanced->Add classpath variables->Select Junit_test_cases_cp->ok- >应用->运行

在在线尝试所有建议后,这是目前唯一对我有用的东西。


j
jmajcan

NoClassDefFoundError 真的意味着它不能初始化类。这与寻找课程无关。在空字符串上调用 trim() 时出现此错误。

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

我的建议是在你的测试开始通过之前从课堂上删除部分。然后你可以确定哪一行给出了错误。


S
Shadyar

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


J
Jake Graham Arnold

这些步骤对我有用。

删除本地 Maven 存储库的内容。

在命令行中运行 mvn clean install。 (cd 到 pom 目录)。

在 Eclipse 中构建项目。


T
Toumi

1- mvn 日食:日食

2-项目清理所有项目

3-重新启动


B
Blake Neal

值得一提的另一个答案是,如果您使用的是 eGit,并且您的类路径由于诸如 Clover 之类的测试覆盖率工具而更新,有时会出现清理打嗝并没有完全删除 /path/to/git/repository/<project name>/bin/ 的内容

本质上,我使用了 Eclipse 的错误日志视图,确定了在清理工作期间导致问题的原因,导航到源目录,并手动删除了 <project name>/bin 目录。完成后,我回到 Eclipse 并刷新(F5)我的项目,错误就消失了。


W
William

这也可能是由于“[错误] 此环境中未提供编译器。也许您在 JRE 而不是 JDK 上运行?”


D
David Obber

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

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

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

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

../other-module/src/test/resources src/test/resources (相对于主模块文件夹,由java插件自动添加)

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


Y
Yao Li

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


G
Groot

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

在 Order 底部添加 jre 和 project src 并在构建路径中导出


I
Ishan Liyanage

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

例如

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

f
fayabobo

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

https://i.stack.imgur.com/oYv4y.png


B
Ben

检查您的项目是否作为 Maven 项目打开,而不仅仅是常规 Java 项目。实际上很简单,但这正是您可能会错过它的原因。


j
jmajcan

我也遇到过同样的问题。我通过删除外部 JUnit jar 依赖项解决了这个问题,该依赖项是通过从 Internet 外部下载添加的。但是后来我去了项目->属性->构建路径->添加库->junit->选择了版本(ex junit4)->应用。

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


L
Lorenzo Lerate

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


S
Sathya

可能是您忘记将 Main 类和 Test Case 类放在 /src/test/java 中。检查一次。


java.lang.ClassNotFoundException 在类已经编译但由于类路径设置不正确而在运行时出现。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅