剩下的工作是要編寫 Ant 構(gòu)建腳本 build.xml。雖然這個過程稍嫌繁瑣,但這是一件一勞永逸的事情。現(xiàn)在我們把前面編寫的測試用例都放置到 Ant 構(gòu)建腳本中執(zhí)行,為項目 coolJUnit 的構(gòu)建腳本添加一下內(nèi)容:
Xml代碼 復(fù)制代碼
<?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
- - - - - - - - - - - - - - - - - -->
<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 構(gòu)建腳本中的核心內(nèi)容,其它 target 都是為它的執(zhí)行提供前期服務(wù)。Task junit 會尋找輸出目錄下所有命名以“Test”開頭的 class 文件,并執(zhí)行它們。緊接著 Task junitreport 會將執(zhí)行結(jié)果生成 HTML 格式的測試報告(圖8)放置在“report folder”下。
為整個項目的單元測試類確定一種命名風(fēng)格。不僅是出于區(qū)分類別的考慮,這為 Ant 批量執(zhí)行單元測試也非常有幫助,比如前面例子中的測試類都已“Test”打頭,而測試套件則以“Suite”結(jié)尾等等。
圖8 junitreport 生成的測試報告
現(xiàn)在執(zhí)行一次全面的單元測試變得非常簡單了,只需要運(yùn)行一下 Ant 構(gòu)建腳本,可以走完所有流程,并能得到一份詳盡的測試報告。您可以在 Ant 在線手冊 中獲得上面提及的每一個 Ant 內(nèi)置 task 的使用細(xì)節(jié)。
總結(jié)
隨著越來越多的開發(fā)人員開始認(rèn)同并接受極限編程(XP)的思想,單元測試的作用在軟件工程中變得越來越重要。本文旨在將新的單元測試工具 JUnit 4 介紹給您,以及如何結(jié)合 IDE Eclipse 和構(gòu)建工具 Ant 創(chuàng)建自動化單元測試方案。并且還期望您能夠通過本文“感染”一些好的單元測試意識,因為 JUnit 本身僅僅是一份工具而已,它的真正優(yōu)勢來自于它的思想和技術(shù)。