Grester 是一种针对 Jester 的 Apache Maven 包装器,用于检查未采用测试驱动方式编写的代码
Jester 由 Ivan Moore 编写,它是测试由程序员和开发人员编写的单元测试的优秀工具。该工具基于这样一个假设:代码中的很多区域包含了条件语句、循环语句和 case 语句,并且在一些代码区域中,类的圈复杂度(cyclomatic complexity)由于存在很多执行路径而会突然增加。Jester 主要关注的就是类似这样的代码。但是要运行它,必须使用指向各个资源的格式良好的类路径。
Grester 是针对 Jester 的 Apache Maven 包装器,它减轻了从项目依赖关系构造 Java 类路径之类的麻烦,这样您可以使用 Jester 更轻松地测试执行点。Grester 还增强了使用 Maven 的一些优点,Maven 是其基础架构的核心。在对没有使用测试驱动方式编写的代码进行额外检查时,Jester 尤为有用。此类代码可以是旧式应用程序中的遗留代码,甚至还可以是最近编写的代码,这些代码的开发人员认为使用 Agile 的测试驱动方法指导构建高质量代码来说难度较大。
实际上,您可以使用 Grester 来突破使用非测试驱动方式编写代码的限制。根据我的经验,范围蔓延(scope creep)和可能错失或绕过实际业务函数的代码将会增加错误数和恶意代码 数量(快速处理 blob 反模式,即使在很小的代码段中,都不必作为单个难于管理的模块或模块集)。
本文不会探讨解释 Jester 的输出及精确说明 Jester 如何工作的技术细节。本文旨在探讨获取并围绕 Jester 使用 Maven 插件包装器。
获取 Grester
运行 Grester 所需的基础设施非常少:您只需要使用 Maven 就能构建和使用 Grester。Grester 是用 Groovy 编写的,Groovy 是一种动态语言,它的语法类似于 Java 并且拥有 Python 和 Ruby 等语言的优点。Grester 本质上只是用于快速运行 Jester 工具的另一个 Maven 插件,因此 Grester 的真正威力来自 Jester。在本文中,结合使用了 Jester V1.37 与 Grester V0.3 alpha 发行版。
Jester 打破常规:为什么呢?
如果所有项目 Java Archive (JAR) 依赖关系都位于一个位置,那么直接运行 Jester 不可能比在 Java 类路径条目中引用单个路径更简单。但是,当依赖关系散布到整个文件系统中时,每次 Jester 运行的配置问题会十分复杂而讨厌,尤其是在各个依赖关系随时间改变位置时。使用 Maven 将显著简化此过程。
Jester 运行在 Maven 项目构建配置以外的每个实例中。那么,Grester 的特别之处在哪里?答案在于 Maven 组织其依赖关系的方式。这种 “安排” 非常高效,Maven 不但尝试把 Java(或 Groovy)JAR 和 Web 归档 (WAR) 的查找方式标准化,而且还尝试把保存方式标准化。
Linux 和 UNIX 用户注意
Grester 的文件大小非常小,并且在解压缩后,您可以放心地删除目前的压缩归档。这里是在 Windows 计算机中使用 Cygwin 来说明解压缩它是多么简单 —— 甚至在模拟的 Linux 环境中也一样。但是,不建议用早于 Grester 0.3 的版本在 Linux 或 UNIX 系统上试验,因为虽然 Windows alpha 版本非常稳定,但是缺少一些操作系统功能。不过,在所有版本中,都使用 Jester V1.37。
如果您不熟悉 Maven,请使用系统库 的概念。有一个位于 $USER_HOME\.m2\repository 的默认本地系统库,还有一个在位于 $MAVEN_HOME/conf 的 pom.xml 或 settings.xml 文件中配置的远程系统库。
安装 Grester
获取 TAR 压缩资源(.tar 文件和 tar.gz 文件适用于 UNIX 和 Linux)或者 Microsoft Windows ZIP 文件后,请将其解压缩。有很多种方法可以完成此操作:在这里,我使用 Windows 中的 Cygwin 实用程序。
图 1. 用 Windows 中的 Cygwin 实用程序解压缩 Grester