JUnit 測試框架被越來越多的開發小組所共同使用。歸功于各種各樣的測試裝具模塊,現在可以測試構成任何 Java 應用程序的幾乎每一個組件。事實上,幾乎整個二級市場似乎都是用圍繞 Junit 建立的。包括 Cactus、jfcUnit、XMLUnit、DbUnit 和 HttpUnit 這樣的裝具模塊都可以免費供開發人員用于測試應用程序。隨著系統的復雜程度的增加,并且有這么多工具可供使用,沒有什么理由不依靠單元測試。
不過,開發人員不僅僅是程序員。我們與用戶交互以修復 bug 并確定需求。我們參加會議并進行電話推銷。我們完成一些(有時全部)質量保證功能。既然有這么多責任,希望盡可能自動化就是自然而然的了。因為好的團隊(除了其他事情外)會進行大量測試,希望自動化不同的開發過程的人常常會對這一領域進行詳細研究。
自動化單元測試
有許多種自動化所有項目測試用例的定位和執行的方法。一種解決方案是聯合使用 Ant 的 junit 任務與嵌入的 fileset 任務。這樣就可以包括和排除特定目錄中的文件(基于文件名樣式)。另一種選擇是使用 Eclipse 的一個功能,它可以指定所有測試所在的和執行的目錄。前一種選擇提供了對運行的測試進行過濾的靈活性(并且由于它是一個純粹的無頭(headless)Java 應用程序,可以運行在幾乎所有地方),后一種選擇可以調試“動態”包。是否可以結合這兩種方式的強大和靈活性?
有了 Python 編程語言的 Java 平臺實現 -- Jython,回答是響亮的“可以!”(如果不熟悉 Jython,應當在繼續本文之前補充這方面知識,更多信息請參閱后面的 參考資料)。利用 Jython 的強大和優雅,可以維護一個定位文件系統、搜索匹配某種樣式的類和動態編譯 JUnit TestSuite 類的腳本。這個 TestSuite 類像所有其他靜態定義的類一樣,可以用喜愛的調試程序容易地調試。(在本文中使用的例子假定使用的是 Eclipse IDE,不過,我在這里描述的技術不用做很多修改就可以用于大多數其他 IDE。)
在進行任何設計決定時,必須對所做的選擇和決定的影響進行權衡。在這里,為了得到調試動態生成的測試包的能力,必須增加額外的復雜性。不過,這種復雜性被 Jython 自身所減輕了:Jython 經過很好測試并得到很好的支持,并且是開放源代碼的。而且,Python 越來越成為面向對象的、平臺獨立的編程的事實上的標準。出于這兩種原因,采用 Jython 的風險很少,特別是它提供了這樣的好處:在創建和調試動態生成的 JUnit TestSuite 類方面具有無可匹敵的靈活性。
如果是否采用 Jython 是主要的考慮,那么即使不使用它也可以在解決原來的問題方面有所進展。不使用 Jython 的話,可以用一個 Java Property 文件存儲一組類、目錄和包,以在包中加入或者排除測試。不過,如果選擇使用 Jython,就可以利用整個 Python 語言和運行時來解決選擇執行哪些測試的問題。Python 腳本比 Java Property 文件靈活得多,它只受限于您的想像力。
利用 Jython 與 Java 平臺的無縫集成可以創建靜態定義的、然而是動態構建的 TestSuite 類。有大量關于 JUnit 的教程,不過還是看下面這兩行代碼作為復習。清單 1 是靜態構建 TestSuite 類的一個例子(這個例子取自 JUnit: A Cook's Tour,有關它和其他 JUnit 資源的鏈接請參閱 參考資料):
清單 1.靜態定義 TestSuite
public static Test suite() {
return new TestSuite( MoneyTest.class );
}
清單 1 表明 TestSuite 是由 Test 類的類實例組成的。這個裝具模塊完全利用了這一點。為了分析這個工具的代碼,應從 參考資料中下載本文的示例 JAR 文件。這個文檔包含兩個文件:DynamicTestSuite.java 和 getalltests.py,前者是一個用 Phthon 腳本動態生成 TestSuite 的 JUnit 測試裝具模塊,后者是一個搜索匹配特定樣式的文件的 Python 腳本。DynamicTestSuite.java 使用 getalltests.py 構建 TestSuite ?梢孕薷 getalltests.py 以更好地適合自己的項目的需要。
文章來源于領測軟件測試網 http://www.kjueaiud.com/