运行 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 测试用例,但仍然得到相同的错误。

345130 次浏览

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

之所以会出现这种情况,是因为在使用 mvn clean compile时只有源代码在编译(我使用的是 maven 3.1.0,所以我不确定它是否总是这样运行)。

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

在前面的示例中,我总是使用 mvneclipse:eclipse并重新启动 Eclipse,它运行良好。在迁移到 GIT 之后,它就不再为我工作了,这有点奇怪。

这里的基本问题是 Eclipse 先生没有找到已编译的类。 然后,我将输出文件夹设置为 Project/target/test-classes,这是由 mvn clean install默认生成的,没有跳过测试,然后进行以下工作:

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

Eclipse-> Run-> Run Configuration-> under JUnit-> Select mytest-> under classspath tab-> Select User Entry-> Advanced-> Add Folder-> Select-> Apply-> Run

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

Eclipse-> Windows-> 类路径变量-> New-> [ Name: Junit _ test _ cases _ cp | path: ]-> ok 那就去 Eclipse-> Run-> Run Configuration-> JUnit-> Select mytest-> under classspath tab-> Select User Entry-> Advanced-> Add classspath variable-> Select JUnit _ test _ cases _ cp-> ok-> Apply-> Run

这是目前唯一的工作后,我尝试所有的建议在线。

我在调试 Junit 的 Eclipse Helios 中遇到了类似的问题。我的问题几乎没有什么不同,因为我能够成功地运行 Junit,但是当我在调试相同的 JUnit 时得到 ClassNotFoundException 时。

我已经在其他 stackoverflow.com 和论坛上尝试了各种不同的解决方案,但似乎都不管用。在这些问题困扰了我将近两天之后,我终于找到了解决它的办法。

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

希望这些有用。

也许你忘了把 主课测试用例类放进去 /src/test/java. 检查一次。

我遇到了同样的问题,我能够用@slomek 的 回答修复它,但是问题在那之后又出现了。

最后,我通过将项目的输出文件夹添加到 JUnit 测试的运行配置中来修复它:

  • Project properties -> Java Build Path -> Default output folder中查找项目的输出文件夹
    • 通常这是 <project-folder>/bin
  • 转到 Run -> Run Configurations...
  • 单击单元测试的运行配置并单击 Classpath选项卡
  • User Entries下显式地添加项目的输出文件夹-即使项目已经包含在其中
    • 单击 Advanced -> Add folder添加输出文件夹

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

这些步骤对我很有效。

  • 删除本地 Maven 存储库的内容。
  • 在命令行中运行 清除安装
  • 在 Eclipse 中构建项目。

1-mvn eclipse: eclipse 1-mvn Eclipse: Eclipse

2-项目清洁所有项目

3-重启

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

在我的例子中,我有一个错误的 maven 目录结构。

应该是这样的:

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

我修好之后,一切都很顺利。

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

就我而言,只有接下来的几步帮助我解决了这个问题:

  1. Project-> properties-> Run/Debug Settings 项目-> 属性-> 运行/调试设置。
  2. 在“启动‘ ... ...’配置”中选择类/项目
  3. 编辑-> 类路径-> “还原默认条目”

作为另一个答案,值得一提的是,如果您正在使用 eGit,并且您的类路径由于一个测试覆盖工具(比如 Clover)而得到更新,那么有时候会出现一个清理小问题,不能完全删除 /path/to/git/repository/<project name>/bin/的内容

实际上,我使用了 Eclipse 的 Error Log View,确定了在清理过程中导致问题的原因,导航到源目录,并手动删除了 <project name>/bin目录。完成之后,我回到 Eclipse 并刷新(F5)我的项目,错误消失了。

检查您的项目是否作为 Maven 项目而不仅仅是一个普通的 Java 项目打开。事实上,这是显而易见的,但这也正是你可能错过它的原因。

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

我在一个 Gradle 项目中遇到过同样的问题,该项目使用了一个测试 SourceSet,其中包含两个资源目录。

这个代码片段来自 main-module. gradle 并将一个资源目录添加到测试 SourceSet:

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

为此,我有两个与项目 main-module 的测试 SourceSet 相关的资源目录:

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

我发现,如果在两个源目录中都有两个名称相同的文件,则流程资源阶段出现了错误。因此,没有开始编译,因此没有。类被复制到 bin 目录中,JUnit 在其中查找这些类。ClassNotFoundException 只是重命名了两个文件中的一个,就消失了。

NoClassDefFoundError 实际上意味着它无法初始化该类。没什么和找到类有关。当在空字符串上调用 trim ()时,我得到了这个错误。

JUnit 不会显示 NullPointerException 我从一个属性文件中获取字符串,这个属性文件不能用于测试。

我的建议是从类中删除部分,直到测试开始通过。然后您可以确定哪一行给出了错误。

我也遇到过同样的问题。我通过移除外部 JUnit jar 依赖项解决了这个问题,这个依赖项是我从外部互联网下载后添加的。但随后我转到 project-> properties-> build path-> add library-> junit-> select the version (ex junit4)-> application。

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

对测试类进行一些虚拟的修改并保存测试类可以解决这个问题,它将自动生成.class

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

我通过运行 Maven 更新修复了我的问题。 右键单击 Project your Project > Maven > Update Project

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

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

请检查是否添加了 junit4作为依赖项。

例如:

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

在我的例子中,从构建路径配置更改 Maven 依赖项的顺序对我来说不起作用。我从 Run 配置中更改了它的顺序。
遵循以下步骤:
•进入运行-> 运行配置..。
点击单元测试的运行配置并点击类路径选项卡。
检查使用临时 JAR 来指定类路径(避免类路径长度限制)。
也许这就足够了,你的测试成功了。你应该试试,所以按下运行按钮。如果它不工作。再次按照前面的所有步骤,不要按 Run 按钮,转到下一步。
在用户输入的子分支中,将 Maven 依赖项移到项目或测试类的上方。
•单击“运行”按钮。

对于我来说,我必须把项目 x/src/test/java/放在“ order and export”的“ java build path”的底部

enter image description here