随笔-94  评论-56  文章-3  trackbacks-0
这一篇讲述如何自动运行JUnit测试进行自动化测试。我们将JUnit测试放在test目录。
第一步:编译测试
首先,在build.xml文件里定义一个单独的构建目标,以便编译测试源文件。
  <target name="compile-tests" depends="compile">
    <javac srcdir="${test.dir}" destdir="${build.test.dir}">
      <classpath refid="project.classpath" />
    </javac>
  </target>
compile-tests目标用<javac>任务在test.dir目录编译测试源文件,并将结果类文件放入build.test.dir目录,用project.classpath路径作为测试代码的类路径。
第二步:运行测试
在build.xml文件里定义构建目标,使所有的JUnit测试自动运行。
  <target name="test" depends="compile-tests">
    <junit haltonfailure="true">
      <classpath refid="project.classpath" />
      <formatter type="brief" usefile="false" />
      <batchtest>
        <fileset dir="${build.test.dir}"
          includes="**/*Test.class" />
      </batchtest>
      <sysproperty key="doc.dir"   value="${doc.dir}" />
      <sysproperty key="index.dir" value="${index.dir}" />
    </junit>
  </target>
test目标的depends属性生成与刚定义的compile-tests目标的依存关系。
如果构建成功,意味着所有的东西不仅都编译过,还都通过了测试。
将haltonfailure属性设为true会使构建随着任何测试失败而失败。
这里我们再次用project.classpath定义了运行JUnit测试的类路径。
下面定义了一个输出格式化器,在<formatter> 元素中,使用brief类型来输出每个运行的测试用例的名称及其统计信息,仅当测试失败时才有更详细的信息(plain类型默认比brief类型输出信息多一些;xml类型将测试结果以XML格式输出)。将usefile属性值设为false会将测试结果送往控制台,而不是写入文件。
<batchtest>任务收集从封闭<fileset>元素中返回的所有测试,并自动创建包含了所有测试的测试suite。我们将对所有的测试类用*Test.java命名约定取名,这些文件将编译成*Test.class文件,放在<fileset>的build.test.dir性质指向的目录中。
最后,<sysproperty>元素定义系统性质为一个键值对,这些性质可以在测试代码中访问。这里,测试需要知道从哪里找到文档,以及向哪里放入文档的索引结果,在运行测试时我们将传递这些结果,例如,测试在运行时查看送入的doc.dir系统性质来定位项目目录结构中doc目录的绝对路径。
要运行测试,请执行test目标:
$ ant test
最后,打扫战场
我们可以定义一个删除所有构建输出的Ant目标。
  <target name="clean">
    <delete dir="${build.dir}" />
  </target>
clean目标使用<delete>任务来删除build.dir所指的目录。要删除目录,请运行clean目标:
$ ant clean
冲掉这些构建输出有积极的作用:从头开始生成构建,可以发现可能被累积构建掩盖的错误。

完整的build.xml:
<?xml version="1.0"?>
<!--
  Excerpted from the book, "Pragmatic Project Automation"
  ISBN 0-9745140-3-9
  Copyright 2004 The Pragmatic Programmers, LLC.  All Rights Reserved.
  Visit www.PragmaticProgrammer.com
 
-->

<project name="dms" default="compile" basedir=".">
  
  
<property name="build.dir"      location="build"/>
  
<property name="build.prod.dir" location="${build.dir}/prod"/>
  
<property name="build.test.dir" location="${build.dir}/test"/>
  
<property name="doc.dir"        location="doc"/>
  
<property name="index.dir"      location="index"/>
  
<property name="src.dir"        location="src"/>
  
<property name="test.dir"       location="test"/>
  
<property name="vendor.lib.dir" location="vendor/lib"/>

  
<path id="project.classpath">
    
<pathelement location="${build.prod.dir}" />
    
<pathelement location="${build.test.dir}" />
    
<fileset dir="${vendor.lib.dir}">
      
<include name="*.jar"/>
    
</fileset>
  
</path>    

  
<target name="prepare">
    
<mkdir dir="${build.prod.dir}"/>
    
<mkdir dir="${build.test.dir}"/>
  
</target>


  
<target name="compile" depends="prepare">
    
<javac srcdir="${src.dir}" destdir="${build.prod.dir}">
      
<classpath refid="project.classpath" />
    
</javac>
  
</target>

  
<target name="compile-tests" depends="compile">
    
<javac srcdir="${test.dir}" destdir="${build.test.dir}">
      
<classpath refid="project.classpath" />
    
</javac>
  
</target>

  
<target name="test" depends="compile-tests">
    
<junit haltonfailure="true">
      
<classpath refid="project.classpath" />
      
<formatter type="brief" usefile="false" />
      
<batchtest>
        
<fileset dir="${build.test.dir}" 
          includes
="**/*Test.class" />
      
</batchtest>
      
<sysproperty key="doc.dir"   value="${doc.dir}" />
      
<sysproperty key="index.dir" value="${index.dir}" />
    
</junit>
  
</target>

  
<target name="clean">
    
<delete dir="${build.dir}" />
  
</target>
  
</project>

下面再举一个实际项目中用到的构建文件的例子:
<?xml version="1.0" ?>

<project name="JSBook" default="compile" basedir=".">

  
<property environment="env" />
  
<property name="src" value="WEB-INF/src" />
  
<property name="classes" value="WEB-INF/classes" />
  
<property name="lib" value="WEB-INF/lib" /> 
  
<property name="dist" value="dist" />
  
  
<path id="task.classpath">
    
<pathelement location="${classes}" />
    
<pathelement location="${lib}" /> 
    
<!-- Tomcat 5.0.16 Servlet 2.4 API -->
    
<pathelement location="${lib}/servlet-api.jar" />
    
<!-- Tomcat 5.0.16 JSP 2.0 API -->
    
<pathelement location="${lib}/jsp-api.jar" />
  
</path>
    
  
<target name="init" >
    
<echo>Init Complete !</echo>
    
<echo>ant home = ${ant.home} </echo>
    
<echo>java home = ${java.home} </echo>
    
<echo>user home = ${user.home} </echo>      
  
</target>
  
  
<target name="compile" depends="init" >
    
<javac classpathref="task.classpath" srcdir="${src}" destdir="${classes}" />
    
<echo level="verbose">Seen with -verbose</echo>
    
<echo level="debug">Seen with -debug</echo>        
    
<echo>Compilation Complete !</echo>
  
</target>
  
  
<target name="war" >
    
<jar jarfile="${dist}/JSPBook.war" basedir="."/>
  
</target>

</project>
   
也许你已经看出来了,这就是〈〈jsp2.0技术手册〉〉里面的build.xml文件啦!
posted on 2006-08-31 11:42 小言身寸 阅读(762) 评论(0)  编辑  收藏 所属分类: JAVA相关技术

只有注册用户登录后才能发表评论。


网站导航: