JUnit 框架是 Java 語言單元測試當前的一站式解決方案。這個框架值得稱贊,因為它把測試驅動的開發思想介紹給 Java 開發人員并教給他們如何有效地編寫單元測試。但是,在過去的幾年中,JUnit 的改進不大;所以,為當今復雜的環境編寫測試已經變成一個越來越困難的任務,即 JUnit 必須與其他一些補充性測試框架集成起來。在本文中,Filippo Diotalevi 介紹了 TestNG,這是一個測試 Java 應用程序的新框架。TestNG 不僅確實強大、創新、可擴展、靈活,它還展示了 Java Annotations(JDK 5.0 中的重大新特性)的有趣應用。
在每個現代軟件包的構造階段,測試這一實踐都扮演著中心角色。過去那種先編寫代碼,然后有空的時候再測試(或者根本不測試)的日子已經一去不返,因為大多數開發人員現在認識到需要采用編碼和測試彼此交織、同步推進的軟件方法論,以便盡早發現 bug,在開發過程開始的時候就識別出主要的風險。
JUnit 超過了其他測試框架,推動開發人員理解了測試尤其是單元測試的用途。利用一個相當簡單、實用、嚴格的架構,JUnit 已經能夠“傳染”大量開發人員。(有關“被測試傳染”的更多信息,請參閱參考資料。) JUnit 用戶已經學會了單元測試的一些基本規則:
每段代碼都必須經過測試。 只要有可能,代碼的測試必須隔離進行(例如,使用像模擬對象這樣的技術)。 軟件必須容易測試 —— 也就是說,在編寫的時候要想著測試。但是,隨著開發人員對測試的信任增長,JUnit 的簡單性和嚴格性把他們分成兩個相反的派別。一方面,有些人堅信 JUnit 的簡單性對于不斷地提醒程序員軟件也必須保持簡單來說是必不可少的(這稱為 KISS 原則,代表keep it simple, stupid);另一方面,有些人認為 JUnit 不是簡單而是簡化,所以他們想要從測試框架得到新的高級特性、更大的靈活性和更強大的能力。JUnit 的一些特殊特性,就是為了滿足這個群體的一些具體批評而推出的:
因為 Java 語言的單繼承性,所以必須擴展TestCase類的限制很大。 無法向 JUnit 的測試方法傳遞參數,也無法向setUp()和tearDown()方法傳遞參數。 執行模型有點奇怪:每次執行一個測試方法的時候,都要重新實例化測試類。 管理復雜項目中的不同測試套件有可能非常復雜。
TestNG 的創造者
TestNG 的創造者是 Cedric Beust,他在 Java 編程領域非常出名,是 EJB 3 專家組的成員,也是其他一些流行的開源項目(例如 EJBGen 和 Doclipse)的創造者。TestNG 在 Apache 軟件許可條款約束下發布,并可從其 Web 站點下載(請參閱參考資料中到該站點和 Cedric 站點的鏈接)。
在本文中,您將學習到如何用這個叫做TestNG的新測試框架為應用程序編寫單元測試。TestNG 的靈感來自 JUnit,同時盡量保持后者的簡單性;但是,TestNG 消除了老框架的大多數限制,使開發人員可以編寫更加靈活、更加強大的測試。由于 TestNG 大量借用 Java Annotation(隨 JDK 5.0 引入;有關這個新特性的更多信息,請參閱參考資料)來定義測試,所以本文也可以向您演示如何在實際的生產環境中使用 Java 語言的這個新特性。
關于代碼
為了演示 TestNG 的用法,我要為叫做 Jakarta Common Lang 的這個廣泛應用的開源庫(其中包含一些處理和操縱字符串、數字和 Java 對象的有用的類)編寫一些單元測試。在下面的參考資料一節中,您可以找到 TestNG 和 Jakarta Common Lang 庫的鏈接;如果您想在自己的機器上隨著本文一起練習,這二者都需要下載。
可以在兩個不同的包中得到 TestNG:一個包要求 JDK 5.0,另一個包與 Java 語言 1.4 版本兼容。定義測試的時候,它們使用的語法略有差異:前者使用 JDK 5.0 標注,后者使用舊的 Javadoc 風格的標注。本文使用的是 JDK 5.0 版本,所以在繼續閱讀本文之前,需要對標注有基本的了解;您可以在參考資料中找到關于這個主題的 developerWorks 資源的鏈接。但是,您要知道只有在編譯和運行測試的時候才需要 JDK 5.0,所以您仍然可以用自己喜歡的編譯器來構建應用程序。實際上,您將用從 Jakarata 項目的 Web 站點下載的相同 JAR 文件來測試 Jakarta Common Lang 庫。關于使用 Java 平臺 1.4 版本的 TestNG 的更多細節,可以在 TestNG 的 Web 站點上找到。
文章來源于領測軟件測試網 http://www.kjueaiud.com/