使用 Grester 简化 Java 应用程序的 JUnit 测试

发表于:2009-04-10来源:作者:点击数: 标签:junitJUnitJUNITJunitjava
关键字: 单元测试 、 软件测试 您一定编写过大量单元测试。作为一名 开发 人员,您每天都要运行很多次测试,尤其在持续集成环境中更是如此。但是如果因为修改源代码而打断了这些单元测试,会带来什么影响呢?当 Jester 与 Maven 结合在一起构造 Grester 后

关键字:单元测试软件测试

        您一定编写过大量单元测试。作为一名开发人员,您每天都要运行很多次测试,尤其在持续集成环境中更是如此。但是如果因为修改源代码而打断了这些单元测试,会带来什么影响呢?当 Jester 与 Maven 结合在一起构造 Grester 后,您很快就会找到解决方案
Jester 由 Ivan Moore 编写,它是测试由程序员和开发人员编写的单元测试的优秀工具。该工具基于这样一个假设:代码中的很多区域包含了条件语句、循环语句和 case 语句,并且在一些代码区域中,类的圈复杂度(cyclomatic complexity)由于存在很多执行路径而会突然增加。Jester 主要关注的就是类似这样的代码。但是要运行它,必须使用指向各个资源的格式良好的类路径。

        Grester 是针对 Jester 的 Apache Maven 包装器,它减轻了从项目依赖关系构造 Java™ 类路径之类的麻烦,这样您可以使用 Jester 更轻松地测试执行点。Grester 还增强了使用 Maven 的一些优点,Maven 是其基础架构的核心。在对没有使用测试驱动方式编写的代码进行额外检查时,Jester 尤为有用。此类代码可以是旧式应用程序中的遗留代码,甚至还可以是最近编写的代码,这些代码的开发人员认为使用 Agile 的测试驱动方法指导构建高质量代码来说难度较大。

        实际上,您可以使用 Grester 来突破使用非测试驱动方式编写代码的限制。根据我的经验,范围蔓延(scope creep)和可能错失或绕过实际业务函数的代码将会增加错误数和恶意代码 数量(快速处理 blob 反模式,即使在很小的代码段中,都不必作为单个难于管理的模块或模块集)。

        本文不会探讨解释 Jester 的输出及精确说明 Jester 如何工作的技术细节。要获得这些信息,请参阅 参考资料 中由 Elliott Rusty Harold 撰写的优秀文章,或者访问 Ivan Moore 的 Web 站点。本文旨在探讨获取并围绕 Jester 使用 Maven 插件包装器。

获取 Grester

        您可以通过两个来源之一获取 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) 的查找方式标准化,而且还尝试把保存方式标准化。

        如果您不熟悉 Maven,请使用系统库 的概念。有一个位于 $USER_HOME\.m2\repository 的默认本地系统库,还有一个在位于 $MAVEN_HOME/conf 的 pom.xml 或 settings.xml 文件中配置的远程系统库。

安装 Grester

        获取 TAR 压缩资源(.tar 文件和 tar.gz 文件适用于 UNIX® 和 Linux®)或者 Microsoft® Windows® ZIP 文件后,请将其解压缩。有很多种方法可以完成此操作:在这里,我使用 Windows 中的 Cygwin 实用程序。


原文转自:http://www.ltesting.net