【问题标题】:JUnit tests in Eclipse on Java 9 modular project在 Eclipse 中对 Java 9 模块化项目进行 JUnit 测试
【发布时间】:2018-05-19 15:27:16
【问题描述】:

我想在 Eclipse 中使用 JUnit 5 在 Java 9 模块化项目上运行测试,没有 Maven、Gradle 或所有花哨的东西。所以我有src/main/java module-info.java 和模块包所在的路径,还有src/test/java 所有测试类所在的路径。在 Jigsaw 模块系统之前,一切照旧。我有 Eclipse Oxygen.3a (4.7.3a) 和 Java 10.0.1。

我看过一些来自 Eclipse 的视频,展示了如何将 JUnit 测试添加到模块化项目中,但这让我大吃一惊:他们将 required 关键字放入模块的 module-info.java 中,将其绑定到 JUnit 模块。这真的是正确的吗?

我也见过所有这些--patch-module/--add-reads 解决方案(当我们谈论在控制台中工作时),这似乎是正确的方法,但我不知道如何在 Eclipse 没有将被测模块绑定到 JUnit 模块中实现这一点。这在 Eclipse 中是否可行(没有 Maven 和 s.o)?

【问题讨论】:

  • Till Brychcy 在以下答案中很好地解释了这一点:stackoverflow.com/a/50324391/6505250stackoverflow.com/a/50408329/6505250(问题是 JUnit
  • 所以看起来,在 Oxygen 中是不可能的,但 Photon 可能实际上可以处理它。那我试试看,谢谢指点!
  • 如果您将 JUnit >= 5.0.2 JAR 添加到 Java 构建路径,它也适用于 Oxygen。但最好使用 Photon,它也有 classpath 分离 main vs. test。
  • Oxygen 中的 JUnit 有 5.0.0 版本标签,我不想弄乱它。我和光子一起去了。实际上,在构建路径设置中,可以标记给定的源文件夹是否是测试文件夹,并且有必要为测试和非测试类设置单独的文件夹(需要在 Java Build Path 的 Source 选项卡中选中 Allow output folder for source folder ) 并且我现在可以运行 JUnit 测试(而且看起来很明显,JUnit 库必须放在类路径中,而不是模块路径中)。所以它适用于光子。我可能不会在 Oxygen 中调整 JUnit 版本,但也许有人会尝试。再次感谢!

标签: java eclipse junit5


【解决方案1】:

我也尝试了很长一段时间来解决这个问题。我的方法是在 src/main/java 的源代码目录中添加一个过滤器,以过滤掉 module-info.java。这允许在 src/test/java 中有不同的 module-info.java。它将被复制到输出文件夹中。这样,您可以在 IDE 中运行单元测试,并将另一个用于最终构建。但是,您需要自己更新 src/main/java 中的内容。

右键项目>属性>Java构建路径>源码

选择 src/main/java 条目,点击 Edit > Next > Exclusion Patterns > Add

【讨论】:

  • 这是否意味着src/test/java 类是模块化的(因为其中有额外的module-info.java)?那么src/main/java/module-info.java 的任何更改都可能需要更改src/test/java/module-info.java?对我来说似乎有点不对劲,但这听起来像是一些解决方案,你。然而,我宁愿建议切换(如果可能)到 Photon,测试与主要分离在那里工作得很好。
  • Eclipse 项目中只有一个模块,因为 main 中的 module-info 被过滤掉了。我承认我的解决方案不是很好,它更像是一个“至少它有效”的解决方案。问题是我不想将与测试相关的条目添加到 main 中的模块信息中。如果 Eclipse 确实支持有两个 module-info.java 文件,那就太好了,但这可能需要它还管理两个 bin 目录。我正在使用 Photon,但找不到这样的功能。你是怎么处理的?
  • 确实(至少到目前为止)每个项目只能有一个模块文件。然而,完全摆脱模块文件中的测试内容是可能的。在 Photon 中,您需要使用构建路径设置。首先,您需要为每个源文件夹允许单独的输出文件夹。然后你需要为 main 和 test src 文件夹设置不同的输出文件夹。最后,您需要将 test src 文件夹标记为 TEST 文件夹(覆盖图标变为绿色)。从那时起,test src 文件夹作为预模块版本工作(JUnit 在那里完美运行)并且主 src 可以是模块化的。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多