第一步:編譯測(cè)試
首先,在build.xml文件里定義一個(gè)單獨(dú)的構(gòu)建目標(biāo),以便編譯測(cè)試源文件。
? <target name="compile-tests" depends="compile">
??? <javac srcdir="${test.dir}" destdir="${build.test.dir}">
????? <classpath refid="project.classpath" />
??? </javac>
? </target>
compile-tests目標(biāo)用<javac>任務(wù)在test.dir目錄編譯測(cè)試源文件,并將結(jié)果類文件放入build.test.dir目錄,用project.classpath路徑作為測(cè)試代碼的類路徑。
第二步:運(yùn)行測(cè)試
在build.xml文件里定義構(gòu)建目標(biāo),使所有的JUnit測(cè)試自動(dòng)運(yùn)行。
? <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目標(biāo)的depends屬性生成與剛定義的compile-tests目標(biāo)的依存關(guān)系。
如果構(gòu)建成功,意味著所有的東西不僅都編譯過(guò),還都通過(guò)了測(cè)試。
將haltonfailure屬性設(shè)為true會(huì)使構(gòu)建隨著任何測(cè)試失敗而失敗。
這里我們?cè)俅斡胮roject.classpath定義了運(yùn)行JUnit測(cè)試的類路徑。
下面定義了一個(gè)輸出格式化器,在<formatter> 元素中,使用brief類型來(lái)輸出每個(gè)運(yùn)行的測(cè)試用例的名稱及其統(tǒng)計(jì)信息,僅當(dāng)測(cè)試失敗時(shí)才有更詳細(xì)的信息(plain類型默認(rèn)比brief類型輸出信息多一些;xml類型將測(cè)試結(jié)果以XML格式輸出)。將usefile屬性值設(shè)為false會(huì)將測(cè)試結(jié)果送往控制臺(tái),而不是寫(xiě)入文件。
<batchtest>任務(wù)收集從封閉<fileset>元素中返回的所有測(cè)試,并自動(dòng)創(chuàng)建包含了所有測(cè)試的測(cè)試suite。我們將對(duì)所有的測(cè)試類用*Test.java命名約定取名,這些文件將編譯成*Test.class文件,放在<fileset>的build.test.dir性質(zhì)指向的目錄中。
最后,<sysproperty>元素定義系統(tǒng)性質(zhì)為一個(gè)鍵值對(duì),這些性質(zhì)可以在測(cè)試代碼中訪問(wèn)。這里,測(cè)試需要知道從哪里找到文檔,以及向哪里放入文檔的索引結(jié)果,在運(yùn)行測(cè)試時(shí)我們將傳遞這些結(jié)果,例如,測(cè)試在運(yùn)行時(shí)查看送入的doc.dir系統(tǒng)性質(zhì)來(lái)定位項(xiàng)目目錄結(jié)構(gòu)中doc目錄的絕對(duì)路徑。
要運(yùn)行測(cè)試,請(qǐng)執(zhí)行test目標(biāo):
$?ant test
最后,打掃戰(zhàn)場(chǎng)
我們可以定義一個(gè)刪除所有構(gòu)建輸出的Ant目標(biāo)。
? <target name="clean">
??? <delete dir="${build.dir}" />
? </target>
clean目標(biāo)使用<delete>任務(wù)來(lái)刪除build.dir所指的目錄。要?jiǎng)h除目錄,請(qǐng)運(yùn)行clean目標(biāo):
$ ant clean
沖掉這些構(gòu)建輸出有積極的作用:從頭開(kāi)始生成構(gòu)建,可以發(fā)現(xiàn)可能被累積構(gòu)建掩蓋的錯(cuò)誤。
完整的build.xml:































































下面再舉一個(gè)實(shí)際項(xiàng)目中用到的構(gòu)建文件的例子:





































也許你已經(jīng)看出來(lái)了,這就是〈〈jsp2.0技術(shù)手冊(cè)〉〉里面的build.xml文件啦!