您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
利用Ant和JUnit进行增量开发
作者:网络转载 发布时间:[ 2013/1/31 13:59:12 ] 推荐标签:

  下一步,我们要创建配置文件。清单 4 显示了一个 Ant 构建文件示例。构建文件中的关键是名为 runtests 的目标。这个目标进行分支判断并运行外部程序,其中外部程序是前面已安装的 junit.textui.TestRunner 。我们指定要使用语句 test.com.company.AllJUnitTests 来运行哪个测试套件。
  清单 4. 构建文件示例
<property name="app.name" value="sample" /> <property name="build.dir" value="build/classes" /> <target name="JUNIT"> <available property="junit.present" classname="junit.framework.TestCase" /> </target> <target name="compile" depends="JUNIT"> <mkdir dir="${build.dir}"/> <javac srcdir="src/main/" destdir="${build.dir}" > <include name="**/*.java"/> </javac> </target> <target name="jar" depends="compile"> <mkdir dir="build/lib"/> <jar jarfile="build/lib/${app.name}.jar" basedir="${build.dir}" includes="com/**"/> </target> <target name="compiletests" depends="jar"> <mkdir dir="build/testcases"/> <javac srcdir="src/test" destdir="build/testcases"> <classpath> <pathelement location="build/lib/${app.name}.jar" /> <pathelement path="" /> </classpath> <include name="**/*.java"/> </javac> </target> <target name="runtests" depends="compiletests" if="junit.present"> <java fork="yes" classname="junit.textui.TestRunner" taskname="junit" failonerror="true"> <arg value="test.com.company.AllJUnitTests"/> <classpath> <pathelement location="build/lib/${app.name}.jar" /> <pathelement location="build/testcases" /> <pathelement path="" /> <pathelement path="${java.class.path}" /> </classpath> </java> </target> </project>

  运行 Ant 构建示例

  开发过程中的下一步是运行将创建和测试 HelloWorld 类的构建。清单 5 显示了构建的结果,其中包括了各个目标部分。酷的那部分是 runtests 输出语句:它告诉我们整个测试套件都正确运行了。

  我在图 4 和图 5 中显示了 JUnit GUI,其中所要做的是将 runtest 目标从 junit.textui.TestRunner 改为 junit.ui.TestRunner 。当您使用 JUnit 的 GUI 部分时,您必须选择退出按钮来继续构建过程。如果使用 Junit GUI 构建包,那么它将更难与大型的构建过程相集成。另外,文本输出也与构建过程更一致,并可以定向输出到一个用于主构建记录的文本文件。这对于每天晚上都要进行的构建非常合适。
  清单 5. 构建输出示例
E:projectssample>ant runtests Searching for build.xml ... Buildfile: E:projectssampleuild.xml JUNIT: compile: [mkdir] Created dir: E:projectssampleuildclasses [javac] Compiling 1 source file to E:projectssampleuildclasses jar: [mkdir] Created dir: E:projectssampleuildlib [jar] Building jar: E:projectssampleuildlibsample.jar compiletests: [mkdir] Created dir: E:projectssampleuild estcases [javac] Compiling 3 source files to E:projectssampleuild estcases runtests: [junit] .. [junit] Time: 0.031 [junit] [junit] OK (2 tests) [junit] BUILD SUCCESSFUL Total time: 1 second

图 4. JUnit GUI 测试成功

图 5. JUnit GUI 测试失败

  了解测试的工作原理
  让我们搞点破坏,然后看看会发生什么事。夜深了,我们决定把 "Hello World" 变成一个静态字符串。在更改期间,我们 不小心 打错了字母,将 "o" 变成了 "0",如清单 6 所示。

  清单 6. Hello world 类更改
package com.company; public class HelloWorld { private final static String HELLO_WORLD = "Hell0 World"; public String sayHello() { return HELLO_WORLD; } }

在构建包时,我们看到了错误。清单 7 显示了 runtest 中的错误。它显示了失败的测试类和测试方法,并说明了为什么会失败。我们返回到代码中,改正错误后离开。
清单 7. 构建错误示例
E:projectssample>ant runtests Searching for build.xml ... Buildfile: E:projectssampleuild.xml JUNIT: compile: jar: compiletests: runtests: [junit] ..F [junit] Time: 0 [junit] [junit] FAILURES!!! [junit] Test Results: [junit] Run: 2 Failures: 1 Errors: 0 [junit] There was 1 failure: [junit] 1) testSayHello(test.com.company.HelloWorldTest) "expected:<Hello World> but was:<Hell0 World>" [junit] BUILD FAILED E:projectssampleuild.xml:35: Java returned: -1 Total time: 0 seconds

  并非完全无痛
  新的过程并不是完全无痛的。为使单元测试成为开发的一部分,您必须采取以下几个步骤:

    下载和安装 JUnit。
    下载和安装 Ant。
    为构建创建单独的结构。
    实现与主类分开的测试类。
    学习 Ant 构建过程。

  但好处远远超过了痛苦。通过使单元测试成为开发过程的一部分,您可以:

    自动验证以捕捉更改“臭虫”
    从接口角度设计类
    提供干净的示例
    在发行包中避免代码混乱和类膨胀。

  实现 24x7
  保证产品的质量要花费很多钱,但如果质量有缺陷,花费的钱更多。如何才能使所花的钱获得大价值,来保证产品质量呢?

    评审设计和代码。 评审可以达到的效果是单纯测试的一半。
    通过单元测试来确认模块可以使用。 尽管测试早存在,但随着开发实践的不断发展,单元测试逐渐成为日常开发过程的一个部分。

  在我 10 年的开发生涯里,为 emageon.com 工作是重要的部分之一。在 emageon.com 时,设计评审、代码评审和单元测试是每天都要做的事。这种日常开发习惯造了高质量的产品。软件在客户地点第一年的当机次数为零,是一个真正的 24x7 产品。单元测试象刷牙:您不一定要做,但如果做了,生活质量更好。

  参考资料

    您可以参阅本文在 developerWorks 全球站点上的 英文原 .

    下载在本文中引用的 示例代码 。

    从 Apache网站下载 Ant。如需 Ant 文档、FAQ 和其他下载,请访问 Jakarta 项目的Ant 主页 。

    JUnit 主页 提供了额外的测试示例、文档、文章和 FAQ。您可以从 www.xprogramming.com下载 JUnit 3.2。

    Kent Beck 所写的 “简单的 Smalltalk 测试”(Simple Smalltalk Testing) 讨论了一个简单的测试策略和支持它的框架。

    请参阅其它开发者的有关单元测试的评论 (comments on unit testing) 。

    要了解其它有用的开发习惯,请访问 编程主页 (Extreme Programming Home page) 。

  关于作者
  Malcolm G. Davis 拥有自己的咨询公司,并任公司的总裁,该公司位于美国阿拉巴马州的伯明翰 (Birmingham)。他把自己看做是个 Java 传道者。在工作之余,他喜欢跑步,以及和他的孩子们一起玩耍。您可以通过 malcolm@nuearth.com与 Malcolm 联系。

上一页123下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd