插件集成测试的特殊问题
Maven 插件在集成测试方面代表了一种特殊的需求。像许多面向组件的系统一样,Maven 提供了在其“自然环境”中测试插件所必需的许多运行时上下文。这意味着,为了正确测试任何特定插件与更大系统的集成,开发人员应该真正执行测试相关插件的特定功能的 Maven 构建。
但是,从插件自己的构建中运行测试构建会带来一些特殊问题。由于我们使用 Maven 来构建 Maven 插件,我们必须处理这样一个事实,即以前版本的插件可能在当前构建中处于活动状态(这不是一个很好的做法,但有时是不可避免的)。这意味着 Maven 必须足够聪明以从运行时上下文中卸载现有的插件版本并加载新版本 - 相应地,卸载测试版本并重新加载旧版本以用于同一反应器中的其他稍后构建。作为替代方案,插件的集成测试可以分叉单独的 Maven 构建,并跟踪输出以验证结果并确定构建是否成功。后一种方法虽然慢得多并且在某种程度上依赖于本地系统配置,
除了插件版本不一致之外,Maven 插件的集成测试还必须应对自己进行清理的需要。请记住,Maven 仅从其自己的本地存储库加载插件(可能在从远程存储库解析它们之后)。因此,在集成测试构建中使用当前插件的唯一实用方法是将其安装到某种本地存储库中,然后指示 Maven 使用该本地存储库进行构建。为了避免其他构建中的副作用(请记住,我们在这里构建 Maven 插件......并且它们用于构建其他项目),避免使用用于正常 Maven 构建的主要本地存储库至关重要。因此,插件集成测试需要一个自定义的本地存储库,集成测试构建可以定向到该存储库。
+ 所有这些似乎表明,确保所有必需的 POM 和插件存在的最佳方法是使用普通的本地存储库来构建一个新的本地存储库以用于测试目的。这方面的工作正在进行中。
最后,为了支持插件的集成测试,重要的是为开发人员提供一个 API 来引导测试环境(理想情况下,检测它何时已经被引导),并提供一个强大的 API 来执行构建和验证结果。