繁体   English   中英

使用 Maven 和 Eclipse 测试白盒单元测试 Java 模块的依赖项

[英]Test dependencies for white-box unit testing Java modules with Maven and Eclipse

我正在尝试将使用 Maven 和 Eclipse 的现有 Java 项目转换为 Java 9+ 模块。 项目有单元测试,单元测试有测试依赖。 我需要测试依赖项在测试代码中可用,但我不希望它们在发布的模块中暴露给世界的其他地方。

我认为模块化世界中的测试很好地描述了 Maven 解决方案。 总之,一种解决方案是在主源文件夹中创建一个module-info.java ,在 testing 文件夹中创建另一个。 主文件夹中的文件具有真正的依赖关系。 test 文件夹中的文件添加了测试依赖项。

该解决方案在 Maven 中运行良好,我可以从命令行构建和运行测试。 但是,当我将该项目作为 Maven 项目导入 Eclipse 时,它​​会犹豫。 Eclipse 抱怨“构建路径包含重复的条目模块信息”并完全拒绝构建项目。

将文章中的其他建议解决方案与包含--add-readsmodule-info.test一起使用无效,并且在 Maven 和 Eclipse 中构建失败,因为测试找不到它们的依赖项。

更复杂的是,我需要从 Maven 导入测试依赖项,但我还需要导入主代码未使用的标准 Java 模块。 例如,一个单元测试依赖于java.httpserver提供的内置 web 服务器,因为它是 JDK 的一部分,任何对测试依赖项所做的魔术都会错过它。

是否有适用于 Maven 和 Eclipse(最新版本)的解决方案? 这听起来像是一个非常普遍的问题,并且模块系统已经存在一段时间了。

请注意,我真的不想更改 Eclipse 中的项目设置。 我可以摆弄 pom 文件中的插件,但是添加一个手动例程,所有开发人员都需要手动编辑生成/导入的项目设置,这不是一个选项。

编辑:对此有一个开放的 Eclipse 错误报告,请参阅Eclipse 错误 536847 似乎尚不支持,但也许有人可以提出解决方法?

Maven 中多类路径每个项目特性的 Eclipse 模拟已经被破坏了很长时间。 症状是您可以使用测试依赖项来拥有非测试类。

本质上 Eclipse 只是认为每个项目都有一个单一的类路径,而不是两个并行的类路径,这会导致这样的事情......不做正确的事情。

我建议将每个有问题的项目分成两个。 一个是实际来源,一个是测试来源(取决于实际来源)。 这将避免 Eclipse 错误,还允许您使用最新版本的 Java 进行测试,同时为旧版本的 Java 构建应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM