在Java 9模块化项目中,如何在Eclipse中进行JUnit测试

8
我想在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测试,但这让我感到非常困惑:他们在模块的module-info.java中加入了required关键字,将其绑定到JUnit模块。这样做真的正确吗?
我也看过所有这些--patch-module/--add-reads的解决方案(当我们谈论在控制台中工作时),似乎这是正确的方法,但我不知道如何在Eclipse中实现它,而将测试模块绑定到JUnit模块。这在Eclipse中是否可能(不使用Maven等)?

Till Brychcy在以下答案中解释得很好:https://dev59.com/61UL5IYBdhLWcg3wd3xx#50324391 和 https://stackoverflow.com/a/50408329/6505250(问题出在JUnit < 5.0.2中,该版本包含在Oxygen.3a中;使用即将于6月27日发布的Photon预览版即可解决)。 - howlger
看起来在Oxygen中似乎不可能,但Photon实际上可以处理它。那我会试一下的,谢谢你的提示! - Cromax
1
如果您将 JUnit >= 5.0.2 JAR 添加到Java Build Path中,它也可以在 Oxygen 中运行。但最好使用Photon,它还具有主测试路径分离的功能。 - howlger
JUnit在Oxygen中有5.0.0版本标签,我不想搞乱它。我选择了Photon。实际上,在构建路径设置中,可以标记给定的源文件夹是否为测试文件夹,并且必须为测试和非测试类设置单独的文件夹(需要在Java Build Path的Source选项卡中勾选Allow output folders for source folder),现在我可以运行JUnit测试(显然,JUnit库必须放置在classpath而不是modulepath中)。所以在Photon中可以工作。我可能不会调整Oxygen中的JUnit版本,但也许有人会尝试。再次感谢! - Cromax
1个回答

2
我也曾经尝试解决这个问题很长一段时间。我的方法是在 src/main/java 目录下添加一个过滤器,以过滤掉 module-info.java 文件。这样就可以在 src/test/java 中拥有一个不同的 module-info.java 文件。它将被复制到输出文件夹中。这样你就可以在 IDE 中运行单元测试并使用另一个文件进行最终构建。但是,你需要自己保持 src/main/java 中的文件内容更新。
右键单击项目 > 属性 > Java Build Path > 源
选择 src/main/java 条目,点击编辑 > 下一步 > 排除模式 > 添加

这是否意味着 src/test/java 中的类是模块化的(因为其中有额外的 module-info.java)?因此,对 src/main/java/module-info.java 的任何更改都可能需要更改 src/test/java/module-info.java?这对我来说有点不太对,但听起来像是某种解决方案。然而,我建议如果可能的话切换到 Photon,因为它在测试与主要分离方面表现出色。 - Cromax
您的Eclipse项目中只会有一个模块,因为main中的module-info已被过滤掉。我承认我的解决方案并不完美,更像是一种“至少它能工作”的解决方案。问题是我不想将测试相关的条目添加到main中的module-info中。 如果Eclipse支持有两个module-info.java文件,那就太好了,但这可能需要管理两个bin目录。我正在使用Photon,我找不到这样的功能。您是如何处理的? - andy
事实上(至少到目前为止),每个项目只能有一个模块文件。但是可以完全从模块文件中摆脱测试内容。在Photon中,您需要使用构建路径设置。首先,您需要允许每个源文件夹有单独的输出文件夹。然后,您需要为主要和测试src文件夹设置不同的输出文件夹。最后,您需要将测试src文件夹标记为TEST文件夹(叠加图标变为绿色)。自那时以来,测试src文件夹作为预模块版本运行(JUnit在其中完美运行),而主要src可以成为模块化的。希望这有所帮助。 - Cromax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接