Ant 和 JUnit 讓您與 XP 夢想更近一步
Erik Hatcher (erik@hatcher.net)
eBlox 高級設計師
2001 年 8 月
逐步遞增測試和持續編譯是極端編程方法基礎的兩種。 把兩者合并成為一個單獨的、自動進行的過程 — 加上自動生成電子郵件報告 — 您就將在向 XP 夢想前進的道路上邁出堅實的步子。請跟隨 Erik Hatcher,他向您展示了他是如何修改流行的 Ant 1.3 和 JUnit 測試框架,以達到讓編譯和測試過程完全的、用戶化的自動化。
極端編程(XP)主要原則的其中之一是程序員必須執行定期的單元測試,還必須不斷的將變化集成到類似產品的環境中去。此外,XP 建議盡可能讓這個過程自動化。究竟,假如開發者像生產代碼一樣熱切的創建測試案例,過程會相對的輕松些。
假如單元測試做的好的話,您應該會對每一段代碼(非凡是由個別類標明的)都能正常運行而滿足。執行持續的或者不穩定的編譯讓您明白當代碼集成到生產環境時它是如何生效的。在開發周期中集成單元測試和定期自動的編譯,向您和您的客戶保證了代碼發布時是可靠的。
在本文中,我將為自動的編譯和測試過程采取實用的方法。使用 Ant 1.3 和 JUnit 測試框架,將像您展示如何自動化一個過程,這個過程捕捉每個測試套件運行的相關信息、生成有吸引力的報告并用電子郵件發送這個報告。雖然這些性能有許多隱含在 Ant 中,但我還是修改了許多核心任務來更好地滿足要求。這些修改是本文的中心,它們將全部結合到 Ant 的下一個發行版中。可以在本文附帶的源文件中找到所有補丁(請參閱參考文件)。您可能需要在閱讀時回顧一下代碼。此外,假如不熟悉 Ant 1.3,可能需要在繼續這篇文章時學習官方的 Ant 文檔(請參閱參考資料)。
為什么使用 Ant 和 JUnit?
Ant 1.3 是編譯工具中的實際標準。由于用 java 語言編寫,Ant 是開放源代碼的,可以在多種平臺上運行,并為編譯過程帶來了很大的靈活性。JUnit 測試框架也是開放源代碼的,它被廣泛使用,并與 Ant 的編譯過程集成(想學更多關于 Ant 和 JUnit 的知識,請參閱參考資料)。
Ant 1.3 加上可選的 <junit> 以及 <junitreport> 任務,不經修改就可以啟動基本編譯和測試的自動過程。這一過程如下:
一旦捕捉結果,就可以使用 xml 格式化器將每個測試套件運行的故障和錯誤數,連同軟件包和類名還有測試套件的執行時間一起引入。對于每個測試套件,都有以下信息被捕捉:
這個構想中少了些什么
雖然功能上很完美,但上面描述的自動化既不理想也不完整。通過修改 JUnit 任務中的幾個,我們可以創建按如下步驟運行的自動過程。
請給我更多數據
除了將 Ant 和 JUnit 擴展到能自動進行編譯和測試的過程的程度外,我還添加了測試期間捕捉的標準數據。即,我需要知道使用的是什么操作系統、測試的日期/時間、支持測試運行的 JVM 版本以及 classpath。
為捕捉這個信息,我對 Ant 的 JUnit 相關類中的四個類:JUnitTask、JUnitTest、JUnitTestRunner 以及 XMLJUnitResultFormatter 做了簡單修改。您會在附帶的源文件中發現這些變化。
作為附帶的優點,當擴展捕捉的數據時,最終捕捉的不僅是在測試套件運行時特定狀態的信息,而且還包括了整個 Ant 的操作屬性集。其中包含系統屬性和內部 Ant 屬性(例如用戶定義的屬性)。
讓數據報告自動化
對 Ant 的 <junit> 任務進行擴展,使之能提供額外狀態的信息之后,下一步就是啟用自動化的數據報告。
使用 Ant 的最大優勢之一是它的可擴展性。 對于使用帶有 XML 格式化器(<formatter type="xml"/>)的 <junit> 任務運行的每個測試類,都創建了一個 XML 文件。<junitreport> 任務提供了一種很好的將所有收集的數據聚集到一起的方法。使用 XSLT,它會將測試數據轉化為一種可以被輕松理解的 HTML 格式報告。
<junitreport> 可被輕松擴展,答應用戶自定義的 XSLT 文件用作報告生成。XSLT 文件內建于 Ant 的 optional.jar 文件中。我將它和它必備的伴侶 toolkit.xsl 一起解壓縮到本地目錄,然后修改 overview_summary.xsl 文件以便將 Ant 屬性引入報告。 而在 build.xml 中,我指定了“noframes”報告。在“測試套件”的相應部分中,添加到 overview_summary.xsl 中的代碼斷如清單 1 所示。
清單 1. overview_summary.xsl 代碼段用以顯示新添入的屬性
<table> <xsl:for-each select="./一旦修改了這些文件,您就可以運行編譯。負責運行 JUnit 測試和創建 HTML 報告的 build.xml 代碼段如清單 2 所示。
清單 2. build.xml 中用以運行 JUnit 測試和創建 HTMl 報告的部分
<target name="junit" depends="compiletests" descr關于這個編譯代碼段,您應該注重的主要事情是 <junitreport> 中 <report> 元素的 styledir 屬性;它指定了用戶自定義的 XSLT 文件所在的目錄。為捕捉日期/時間戳,您需要在 build.xml 某處的 <junit> 任務前引入 <tstamp> 任務。
讓電子郵件任務自動化
新聞熱點
疑難解答