Java應用利器組合:Ant JUnit Cobertura

火星人 @ 2014-03-10 , reply:0


看標題就知道,這個是開發一個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


版權所有.轉載時以鏈接形式註明作者和原始出處及本聲明.




[火星人 via ] Java應用利器組合:Ant JUnit Cobertura已經有180次圍觀

http://www.coctec.com/docs/java/show-post-61823.html