Junit and Ant
gaoyuan吧
全部回复
仅看楼主
level 1
goldleo1988 楼主
JUnit 和 Ant
随着项目的进展,项目的规模在不断的膨胀,为了保证项目的质量,有计划的执行全面的单元测试是非常有必要的。但单靠JUnit提供的测试套件很难胜任这项工作,因为项目中单元测试类的个数在不停的增加,测试套件却无法动态的识别新加入的单元测试类,需要手动修改测试套件,这是一个很容易遗忘得步骤,稍有疏忽就会影响全面单元测试的覆盖率。
当然解决的方法有多种多样,其中将 JUnit 与构建利器 Ant 结合使用可以很简单的解决这个问题。Ant —— 备受赞誉的 Java 构建工具。它凭借出色的易用性、平台无关性以及对项目自动测试和自动部署的支持,成为众多项目构建过程中不可或缺的独立工具,并已经成为事实上的标准。Ant 内置了对 JUnit 的支持,它提供了两个 Task:junit 和 junitreport,分别用于执行 JUnit 单元测试和生成测试结果报告。使用这两个 Task 编写构建脚本,可以很简单的完成每次全面单元测试的任务。
不过,在使用 Ant 运行 JUnit 之前,您需要稍作一些配置。打开 Eclipse 首选项界面,选择 Ant -> Runtime 首选项(见 图7),将 JUnit 4.1 的 JAR 文件添加到 Classpath Tab 页中的 Global Entries 设置项里。记得检查一下 Ant Home Entries 设置项中的 Ant 版本是否在 1.7.0 之上,如果不是请替换为最新版本的 Ant JAR 文件。
图7 Ant Runtime 首选项   
  
剩下的工作就是要编写 Ant 构建脚本 build.xml。虽然这个过程稍嫌繁琐,但这是一件一劳永逸的事情。现在我们就把前面编写的测试用例都放置到 Ant 构建脚本中执行,为项目 coolJUnit 的构建脚本添加一下内容:
<?xml version="1.0"?>
<!-- =============================================
      auto unittest task    
      ai92                                                                
      ========================================== -->
<project name="auto unittest task" default="junit and report" basedir=".">
   <property name="output folder" value="bin"/>
   <property name="src folder" value="src"/>
   <property name="test folder" value="testsrc"/>
   <property name="report folder" value="report" />
   <!-- - - - - - - - - - - - - - - - - -
           target: test report folder init                      
          - - - - - - - - - - - - - - - - - -->
   <target name="test init">
    <mkdir dir="${report folder}"/>
   </target>
   <!-- - - - - - - - - - - - - - - - - -
           target: compile                      

2011年05月25日 10点05分 1
level 1
goldleo1988 楼主
          - - - - - - - - - - - - - - - - - -->
   <target name="compile">
    <javac srcdir="${src folder}" destdir="${output folder}" />
    <echo>compilation complete!</echo>
   </target>
   <!-- - - - - - - - - - - - - - - - - -
           target: compile test cases                      
          - - - - - - - - - - - - - - - - - -->
   <target name="test compile" depends="test init">
    <javac srcdir="${test folder}" destdir="${output folder}" />
    <echo>test compilation complete!</echo>
   </target>
   <target name="all compile" depends="compile, test compile">
   </target>
   <!-- ========================================
           target: auto test all test case and output report file                      
        ===================================== -->
   <target name="junit and report" depends="all compile">
    <junit printsummary="on" fork="true" showoutput="true">
     <classpath>
      <fileset dir="lib" includes="**/*.jar"/>
      <pathelement path="${output folder}"/>
     </classpath>
     <formatter type="xml" />
     <batchtest todir="${report folder}">
      <fileset dir="${output folder}">
       <include name="**/Test*.*" />
      </fileset>
     </batchtest>
    </junit>
    <junitreport todir="${report folder}">
     <fileset dir="${report folder}">
      <include name="TEST-*.xml" />
     </fileset>
     <report format="frames" todir="${report folder}" />
    </junitreport>
   </target>
</project>
Target junit report 是 Ant 构建脚本中的核心内容,其它 target 都是为它的执行提供前期服务。Task junit 会寻找输出目录下所有命名以“Test”开头的 class 文件,并执行它们。紧接着 Task junitreport 会将执行结果生成 HTML 格式的测试报告( 图8)放置在“report folder”下。
为整个项目的单元测试类确定一种命名风格。不仅是出于区分类别的考虑,这为 Ant 批量执行单元测试也非常有帮助,比如前面例子中的测试类都已“Test”打头,而测试套件则以“Suite”结尾等等。
图8 junitreport 生成的测试报告   
  
现在执行一次全面的单元测试变得非常简单了,只需要运行一下 Ant 构建脚本,就可以走完所有流程,并能得到一份详尽的测试报告。您可以在 Ant 在线手册 中获得上面提及的每一个 Ant 内置 task 的使用细节。

2011年05月25日 10点05分 2
level 1
goldleo1988 楼主
2011年05月25日 11点05分 3
1