该 API 旨在为希望测试 Maven 插件的开发人员提供一系列便利工具。该库的主要重点是集成测试,因为当前的工具和方法不能很好地支持它。
Maven 插件在集成测试方面代表了一种特殊的需求。像许多面向组件的系统一样,Maven 提供了在其“自然环境”中测试插件所必需的许多运行时上下文。这意味着,为了正确测试任何特定插件与更大系统的集成,开发人员应该真正执行测试相关插件的特定功能的 Maven 构建。
但是,从插件自己的构建中运行测试构建会带来一些特殊问题。由于我们使用 Maven 来构建 Maven 插件,我们必须处理这样一个事实,即以前版本的插件可能在当前构建中处于活动状态(这不是一个很好的做法,但有时是不可避免的)。这意味着 Maven 必须足够聪明以从运行时上下文中卸载现有的插件版本并加载新版本 - 相应地,卸载测试版本并重新加载旧版本以用于同一反应器中的其他稍后构建。作为替代方案,插件的集成测试可以分叉单独的 Maven 构建,并跟踪输出以验证结果并确定构建是否成功。后一种方法虽然慢得多并且在某种程度上依赖于本地系统配置,
除了插件版本不一致之外,Maven 插件的集成测试还必须应对自己进行清理的需要。请记住,Maven 仅从其自己的本地存储库加载插件(可能在从远程存储库解析它们之后)。因此,在集成测试构建中使用当前插件的唯一实用方法是将其安装到某种本地存储库中,然后指示 Maven 使用该本地存储库进行构建。为了避免其他构建中的副作用(请记住,我们在这里构建 Maven 插件......并且它们用于构建其他项目),避免使用用于正常 Maven 构建的主要本地存储库至关重要。因此,插件集成测试需要一个自定义的本地存储库,集成测试构建可以定向到该存储库。<relativePath/>父元素。+
+ 所有这些似乎表明,确保所有必需的 POM 和插件存在的最佳方法是使用普通的本地存储库来构建一个新的本地存储库以用于测试目的。这方面的工作正在进行中。
最后,为了支持插件的集成测试,重要的是为开发人员提供一个 API 来引导测试环境(理想情况下,检测它何时已经被引导),并提供一个强大的 API 来执行构建和验证结果。
由于无法掌握任何系统的用例实际上是无法满足用户需求的保证,因此了解集成测试的实际使用方式非常重要。
首先,集成测试被用作单向阀,以确保应用程序的任何特性(在我们的例子中是 Maven 插件)不会因为不相关的开发而退化。一组好的测试——其中集成测试是不可或缺的——可以为开发人员提供实现新功能的自由,并确信他能够在以前版本的基础上有效地构建。
但是,重要的是要了解回归预防并不是集成测试的唯一目的。次要但关键的用例涉及如何将集成测试添加到插件中。只需考虑如何在有缺陷的系统上报告错误即可理解。由于用户通常会报告错误,因此错误报告源自系统外部。对于 Maven 插件,这意味着用户很可能能够以失败构建的形式提供失败行为的示例。为了立即直接使用用户提供给我们的东西,集成测试的设计必须使用用户的构建示例来增强,并且尽可能少地重写。
为此,在这个库中进行集成测试的方法将是执行使用相关插件的示例构建,然后在日志、生成的退出代码或它生成的项目文件中验证结果。
总而言之,这个库努力满足以下 Maven 插件集成测试的要求:
有关下述 API 的更多信息,请参阅JavaDocs。
为了使测试项目对插件版本的变化更具弹性,此工具允许开发人员为插件指定测试版本,因此对插件的任何引用都可以明确并避免意外引用从外部解析的插件版本。