逐步遞增測試和持續編譯是極端編程方法基礎的兩種。 把兩者合并成為一個單獨的、自動進行的過程 ― 加上自動生成電子郵件報告 ― 您就將在向 XP 夢想前進的道路上邁出堅實的步子。請跟隨 Erik Hatcher,他向您展示了他是如何修改流行的 Ant 1.3 和 JUnit 測試框架,以達到讓編譯和測試過程完全的、用戶化的自動化。
極端編程(XP)主要原則的其中之一是程序員必須執行定期的單元測試,還必須不斷的將變化集成到類似產品的環境中去。此外,XP 建議盡可能讓這個過程自動化。畢竟,如果開發者像生產代碼一樣熱切的創建測試案例,過程會相對的輕松些。
如果單元測試做的好的話,您應該會對每一段代碼(特別是由個別類標明的)都能正常運行而滿意。執行持續的或者不穩定的編譯讓您明白當代碼集成到生產環境時它是如何生效的。在開發周期中集成單元測試和定期自動的編譯,向您和您的客戶保證了代碼發布時是可靠的。
在本文中,我將為自動的編譯和測試過程采取實用的方法。使用 Ant 1.3 和 JUnit 測試框架,將像您展示如何自動化一個過程,這個過程捕獲每個測試套件運行的相關信息、生成有吸引力的報告并用電子郵件發送這個報告。雖然這些性能有許多隱含在 Ant 中,但我還是修改了許多核心任務來更好地滿足要求。這些修改是本文的中心,它們將全部結合到 Ant 的下一個發行版中??梢栽诒疚母綆У脑次募姓业剿醒a?。ㄕ垍㈤?參考文件)。您可能需要在閱讀時回顧一下代碼。此外,如果不熟悉 Ant 1.3,可能需要在繼續這篇文章時學習官方的 Ant 文檔(請參閱 參考資料)。
為什么使用 Ant 和 JUnit?
Ant 1.3 是編譯工具中的實際標準。由于用 Java 語言編寫,Ant 是開放源代碼的,可以在多種平臺上運行,并為編譯過程帶來了很大的靈活性。JUnit 測試框架也是開放源代碼的,它被廣泛使用,并與 Ant 的編譯過程集成(想學更多關于 Ant 和 JUnit 的知識,請參閱 參考資料)。
Ant 1.3 加上可選的 <junit> 以及 <junitreport> 任務,不經修改就可以啟動基本編譯和測試的自動過程。這一過程如下:
運行 JUnit 測試實用程序
捕獲測試結果
創建吸引人的 HTML 總結報告
一旦捕獲結果,就可以使用 XML 格式化器將每個測試套件運行的故障和錯誤數,連同軟件包和類名還有測試套件的執行時間一起引入。對于每個測試套件,都有以下信息被捕獲:
測試案例的名稱
執行的持續時間
故障或錯誤的類型(如果適用)
任何故障或錯誤的詳細信息
回頁首
這個構想中少了些什么
雖然功能上很完美,但上面描述的自動化既不理想也不完整。通過修改 JUnit 任務中的幾個,我們可以創建按如下步驟運行的自動過程。
執行 JUnit 測試
將結果記錄到 XML 文件或其它格式的文件
將結果轉化為基于 XSL 格式的測試報告
將這個報告轉化為 HTML 格式
用電子郵件發送報告
請給我更多數據
除了將 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 代碼段用以顯示新添入的屬性
cccccc" class="content">
<table> <xsl:for-each select="./Properties/Property"> <xsl:sort select="@name"/> <tr> <td><xsl:value-of select="@name"/></td> <td><xsl:value-of select="@value"/></td> </tr> </xsl:for-each> </table> |
一旦修改了這些文件,您就可以運行編譯。負責運行 JUnit 測試和創建 HTML 報告的 build.xml 代碼段如清單 2 所示。
清單 2. build.xml 中用以運行 JUnit 測試和創建 HTMl 報告的部分
<target name="junit" depends="compiletests"
<junitreport> |
原文轉自:http://www.anti-gravitydesign.com