17

我刚刚将我的 SpringSource 工具套件(STS,Eclipse 的变体 IDE)升级到了最新版本(v3.6.1)。然后我所有的 JUnit 单元测试都无法再次运行。我收到此错误:

Class not found ClassToTest
java.lang.ClassNotFoundException: ClassToTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)

根据这个博客: ClassNotFoundException when running JUnit unit tests within Eclipse (using Maven),这是因为 Eclipse 中的 Maven 插件配置错误。但是,在 STS 3.6.2 中,我在 Maven 插件中找不到此选项“包含模块”。如何解决此问题并重新启用我的单元测试?

4

6 回答 6

20

当前的 m2e 插件仍然存在一些缺陷。单元测试用例不能作为包含在工作集中的项目运行。以下可能会有所帮助:

  1. 右键单击包含 junit-tests 的项目。
  2. 选择Maven -> 禁用工作区解析

然后尝试再次运行您的测试。

于 2012-08-13T16:06:06.583 回答
5

好吧,看来我得自己回答这个问题了。

出现这个问题的主要原因还是m2eclipse eclipse插件。这个插件的新版本不支持在一个项目中嵌套模块。如果我们真的需要查看多个模块,我们必须从包资源管理器中删除旧模块并创建一个工作集并使用“导入现有 maven 项目”选项再次导入项目。eclipse导入向导会弹出一个窗口,询问你要导入哪个模块。然后我们可以选择所有模块并完成导入。因此,工作集将包含您项目的所有模块,并将每个模块视为一个单独的项目,尽管在工作区中您的模块仍然在一个项目中。通过这样做,它解决了我在 Eclipse 中遇到的与类路径相关的所有问题,

作为参考,这里有一篇文章教你如何创建工作集: Working set

我认为您可以在不创建新工作集的情况下导入项目,但工作集会将属于您项目的所有模块保存在一个集合中,因此更容易组织。

我希望我在两个月前得到答案,这样我就不会花太多时间寻找解决方案。

于 2011-05-13T05:07:10.993 回答
4

我想我找到了解决方案,至少这对我有用:右键单击项目并选择“Maven”->“更新依赖项”

然后当我尝试时,我没有得到 ClassNotFoundException 。

于 2011-06-09T11:42:43.417 回答
2

我尝试了这里和其他帖子中提到的所有内容。人们提供的一些解决方案是:

  1. 更改测试类的输出文件夹。
  2. 为将从 Maven 运行 test-compile 的项目创建一个自定义构建器。
  3. 在项目构建路径的 Order and Export 列表中将 Maven 依赖项移到更高的位置。

还有很多很多,但我发现工作的一个如下:

  1. 关闭开发环境。
  2. 从我的本地 Maven 存储库中删除项目使用的 jar。
  3. 打开 IDE。
  4. 构建项目。
  5. 运行测试。

经过数小时的敲击我的键盘并遵循建议的解决方案后,这个成功了!

于 2013-05-17T14:49:33.517 回答
2

在尝试运行 JUnit 测试类时,我们也遇到了相同的 ClassNotFoundException。但是当我们尝试使用以下步骤时,它成功开始运行。

  1. 选择您的项目。
  2. 单击 Eclipse IDE 工具栏中显示的项目选项。
  3. 选择“清洁”。
  4. 现在尝试运行测试文件。
于 2015-08-24T06:50:32.500 回答
0

作为一种变通方法,尝试运行mvn test-compile(在 Eclipse 中或从命令行),然后尝试在 Eclipse 中运行 Junit 测试。

于 2011-05-12T07:48:02.963 回答