H5W3
当前位置:H5W3 > 其他技术问题 > 正文

Java应用利器组合:Ant+JUnit+Cobertura

看标题就知道,这个是开发一个Java应用的利器组合,使用Ant完成工程的构建(Build),使用JUnit完成单元测试,使用Cobertura完成代码覆盖测试,也可以辅助查找性能瓶颈一些类型的BUG,下面是一个完整的build.xml范例,可以完全拿来用,不需任何修改,只要你的目录和这里的目录一致(应该也是很通用的):

下载下面的build.xml文件

文件内容:<project default="all">    <!– =================================================================== –>    <!–                               Definitions                           –>    <!– =================================================================== –>        <property name="base-dir" location="." />    <property name="lib-dir" location="${base-dir}/lib" />    <property name="src-dir" location="${base-dir}/src" />    <property name="testcase-dir" location="${base-dir}/test" />    <property name="out-dir" location="${base-dir}/classes" />    <property name="report-dir" location="${base-dir}/report" />    <property name="junit-dir" location="${report-dir}/junit" />    <property name="junit-xml-dir" location="${junit-dir}/xml" />    <property name="junit-html-dir" location="${junit-dir}/html" />    <property name="cobertura-dir" location="${report-dir}/cobertura" />    <property name="cobertura-xml-dir" location="${cobertura-dir}/xml" />    <property name="cobertura-html-dir" location="${cobertura-dir}/html" />    <property name="instrumented-dir" location="${report-dir}/instrumented" />    <property name="instrument-file" location="${instrumented-dir}/cobertura.ser" />    <property name="cobertura.dir" value="${instrumented-dir}" />            <path id="classpath.all">        <pathelement location="${out-dir}" />        <fileset id="alljars" dir="${lib-dir}">            <include name="**/*.jar" />        </fileset>    </path>

    <!– include the cobertura building jars –>      <path id="cobertura.classpath">        <path refid="classpath.all" />    </path>            <!– define the cobertura property file –>      <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>        <!– =================================================================== –>    <!–                            Project Targets                          –>    <!– =================================================================== –>        <target name="init" description="initialize the project env.">        <!– create the output folder –>          <mkdir dir="${out-dir}" />        <mkdir dir="${report-dir}" />        <copy todir="${out-dir}">            <fileset dir="${src-dir}" includes="**/*.properties" />        </copy>    </target>

     <target name="compile" depends="init">        <javac srcdir="${src-dir}" destdir="${out-dir}">            <classpath refid="classpath.all" />        </javac>    </target>       <!– =================================================================== –>    <!–                            Unit Test Targets                        –>    <!– =================================================================== –>        <!– – – – – – – – – – – – – – – – – –       target: init      initialize the build env                 – – – – – – – – – – – – – – – – – –>        <target name="init-test" description="initialize the test env.">        <!– create the output folder –>          <mkdir dir="${junit-dir}" />        <mkdir dir="${junit-xml-dir}" />        <mkdir dir="${junit-html-dir}" />    </target>

    <!– – – – – – – – – – – – – – – – – –       target: compile-test      compile the test cases                     – – – – – – – – – – – – – – – – – –>         <target name="compile-test" depends="compile">        <javac srcdir="${testcase-dir}" destdir="${out-dir}">                   <classpath refid="classpath.all" />        </javac>    </target>

    <!– =================================       target: test      run the unit test     ================================= –>        <target name="test" depends="init-test">        <junit fork="yes" printsummary="on" maxmemory="100m">            <sysproperty key="net.sourceforge.cobertura.datafile"                file="${instrument-file}" />

            <classpath location="${instrumented-dir}" />            <classpath refid="cobertura.classpath" />                               <formatter type="xml" />            <batchtest todir="${junit-xml-dir}">                <fileset dir="${out-dir}">                    <include name="**/Test*.class" />                    <exclude name="**/*$*.class" />                </fileset>            </batchtest>        </junit>        <junitreport todir="${junit-xml-dir}">            <fileset dir="${junit-xml-dir}">                <include name="TEST-*.xml" />            </fileset>            <report format="frames" todir="${junit-html-dir}" />        </junitreport>    </target>        <!– =================================================================== –>    <!–                      Code Coverage Targets                          –>    <!– =================================================================== –>

<!– – – – – – – – – – – – – – – – – –       target: init      initialize the build env. for code coverage                          – – – – – – – – – – – – – – – – – –>        <target name="init-coverage" description="initialize the build env.">        <!– create the output folder –>          <mkdir dir="${instrumented-dir}" />        <mkdir dir="${cobertura-dir}" />        <mkdir dir="${cobertura-xml-dir}" />        <mkdir dir="${cobertura-html-dir}" />    </target>        <target name="compile-coverage" depends="init">        <javac srcdir="${src-dir}:${testcase-dir}" destdir="${out-dir}" debug="true" >              <classpath refid="cobertura.classpath" />        </javac>    </target>

    <!– =================================       target: instrument      Instrument into the class files, but      exclude test classes     ================================= –>         <target name="instrument" depends="init-coverage,compile-coverage" description="instrument into the class files">        <!–          Instrument the application classes, writing the          instrumented classes into ${instrumented.dir}.        –>        <cobertura-instrument todir="${instrumented-dir}" datafile="${instrument-file}">            <!–                The following line causes instrument to ignore any                source line containing a reference to log4j, for the                purposes of coverage reporting.            –>            <ignore regex="org.apache.log4j.*" />            <fileset dir="${out-dir}">                <!–                   Instrument all the application classes, but                  don’t instrument the test classes.                –>                <include name="**/*.class" />                <exclude name="**/Test*.class" />            </fileset>        </cobertura-instrument>    </target>                <!– =================================       target: coverage-check      check the code coverage by given rates.     ================================= –>      <target name="coverage-check" description="check the code coverage by given rates">      <cobertura-check branchrate="34" totallinerate="100" />    </target>        <!– =================================       target: coverage-report-xml      generate code coverage report by xml format     ================================= –>          <target name="coverage-report-xml" description="generate xml report">      <!– Generate an XML file containing the coverage data using the "srcdir" attribute. –>      <cobertura-report srcdir="${src-dir}" destdir="${cobertura-xml-dir}" format="xml" datafile="${instrument-file}"/>    </target>        <!– =================================       target: coverage-report-html      generate code coverage report by html format     ================================= –>        <target name="coverage-report-html">    <!–        Generate a series of HTML files containing the coverage        data in a user-readable form using nested source filesets.    –>      <cobertura-report destdir="${cobertura-html-dir}" datafile="${instrument-file}">        <fileset dir="${src-dir}">          <include name="**/*.java"/>        </fileset>      </cobertura-report>    </target>        <!– run the code coverage individual –>    <target name="coverage" depends="compile-coverage,instrument,test,coverage-report-html"         description="Compile, instrument ourself, run the tests and generate JUnit and code coverage reports."/>        <!– =================================================================== –>    <!–                           Public Targets                            –>    <!– =================================================================== –>        <target name="clean">        <delete quiet="true" includeEmptyDirs="true">            <fileset dir="${report-dir}">                <exclude name=".cvsignore" />                <exclude name="CVS" />            </fileset>            <fileset dir="${out-dir}">            </fileset>        </delete>    </target>            <!– =================================================================== –>    <!–                           Global Targets                            –>    <!– =================================================================== –>        <target name="all" depends="compile" />         <target name="junit" depends="clean, compile-test, test" />

    <target name="full" depends="clean, coverage" />

</project>

作者: Cherami原载: Ant+JUnit+Cobertura

本文地址:H5W3 » Java应用利器组合:Ant+JUnit+Cobertura

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址