java - 使用 Maven 和 Eclipse 测试 Java 模块的白盒单元测试依赖项
问题描述
我正在尝试将使用 Maven 和 Eclipse 的现有 Java 项目转换为 Java 9+ 模块。项目有单元测试,单元测试有测试依赖。我需要在测试代码中提供测试依赖项,但我不希望它们在已发布的模块中暴露给世界其他地方。
我认为模块化世界中的测试很好地描述了 Maven 解决方案。总之,一种解决方案是module-info.java
在主源文件夹中创建一个,在测试文件夹中创建另一个。主文件夹中的文件具有真正的依赖关系。test 文件夹中的文件添加了测试依赖项。
该解决方案在 Maven 中运行良好,我可以从命令行构建和运行测试。但是,当我将项目作为 Maven 项目导入 Eclipse 时,它会犹豫。Eclipse 抱怨“构建路径包含重复的条目模块信息”并且根本拒绝构建项目。
在文章中使用module-info.test
包含包含的其他建议解决方案--add-reads
没有效果,并且在 Maven 和 Eclipse 中构建都失败,因为测试找不到它们的依赖项。
为了使事情变得更复杂,我需要从 Maven 导入测试依赖项,但我还需要导入主代码不使用的标准 Java 模块。例如,一个单元测试依赖于由 JDK 提供的内置 Web 服务器java.httpserver
,因为它是 JDK 的一部分,所以对测试依赖项所做的任何魔术都会错过它。
是否有适用于 Maven 和 Eclipse(最新版本)的解决方案?这听起来像是一个非常普遍的问题,并且模块系统现在已经存在了一段时间。
请注意,我真的不想更改 Eclipse 中的项目设置。我可以摆弄 pom 文件中的插件,但是添加一个手动例程,所有开发人员都需要手动编辑生成/导入的项目设置不是一个选项。
编辑:有一个开放的 Eclipse 错误报告,请参阅Eclipse 错误 536847。似乎尚不支持,但也许有人可以提出解决方法?
解决方案
Maven 中多个类路径/项目特性的 Eclipse 模拟已经被破坏了很长时间。症状是您可以使用测试依赖项来拥有非测试类。
本质上 Eclipse 只是认为每个项目都有一个类路径而不是两个并行的类路径,这会导致这样的事情......不做正确的事情。
我建议将每个有问题的项目一分为二。一种是实际来源,另一种是测试来源(取决于实际来源)。这将避免 Eclipse 错误,还允许您使用最新版本的 Java 进行测试,同时为旧版本的 Java 构建应用程序。
推荐阅读
- matlab - 在 simulink 中创建 TCP/IP 服务器块
- c# - 对多个任务使用 Task.WhenAll 时 foo.Start() 出现错误
- unity3d - 如何将新的统一 uxml(通过 ui builder)添加到游戏屏幕?
- python - 未找到没有参数的“产品”反向。尝试了 1 种模式:[u'products/(?P
[-\\w]+)/$'] - here-api - API 不适用于 Javascript 或 REST,产生 KeyError
- javascript - 基于下拉选择突出显示文本行
- ssis - 尽管作业成功,但队列中的 Datafactory Azure SSIS 集成运行时注释
- typescript - 打字稿:条件类型不起作用
- python - 在 pandas DataFrame 中交换和分组列名
- arm - 如何退出 ARM 故障处理程序?