JUnit是一個OpenSource的軟件。
下載junit.jar。將這個jar文件加入你的CLASSPATH系統變量(獲IDE CLASSPATH路徑)就OK了。
編寫測試類的基本步驟:
1> 擴展TestCase類;
2> 覆蓋runTest()方法(可選);
3> 寫一些testXXXXX()方法;
如果你要對一個或若干個的類執行多個測試,該怎么辦?JUnit對此有特殊的解決辦法。
如果需要在一個或若干個的類執行多個測試,這些類就成為了測試的context。
在JUnit中被稱為Fixture。
protected void setUp() throws java.lang.Exception
覆蓋setUp()方法,初始化所有測試的Fixture
protected void tearDown() throws java.lang.Exception
覆蓋tearDown() 釋放你在setUp()中分配的永久性資源,
當JUnit執行測試時,它在執行每個testXXXXX()方法前都調用setUp(),而在執行每個testXXXXX()方法后都調用tearDown()方法,由此保證了測試不會相互影響。
JUnit提供了三種界面來運行測試
[Text UI] junit.textui.TestRunner
[AWT UI] junit.awtui.TestRunner
[Swing UI] junit.swingui.TestRunner
界面很簡單,鍵入類名-testClass。或在啟動UI的時候鍵入類名:
c:>java junit.swingui.TestRunner testClass
下面是一些具體的編寫測試代碼的技巧或較好的實踐方法:?
1. 不要用TestCase的構造函數初始化Fixture,而要用setUp()和tearDown()方法。?
2. 不要依賴或假定測試運行的順序,因為JUnit利用Vector保存測試方法。所以不同的平臺會按不同的順序從Vector中取出測試方法。?
3. 避免編寫有副作用的TestCase。例如:如果隨后的測試依賴于某些特定的交易數據,就不要提交交易數據。簡單的會滾就可以了。?
4. 當繼承一個測試類時,記得調用父類的setUp()和tearDown()方法。?
5. 將測試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.)?
6. 測試類和測試方法應該有一致的命名方案。如在工作類名前加上test從而形成測試類名。?
7. 確保測試與時間無關,不要依賴使用過期的數據進行測試。導致在隨后的維護過程中很難重現測試。?
8. 如果你編寫的軟件面向國際市場,編寫測試時要考慮國際化的因素。不要僅用母語的Locale進行測試。?
9. 盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡潔。
?
10.測試要盡可能地小,執行速度快。
---------------------------------------------------
??? JUnit是單元測試工具,我的理解是用來測試單個模塊功能的工具,非常適合測試比較獨立的模塊。
??? 測試的用途是用來檢查錯誤,我認為這個工具并不只是幫助編程時查錯。對于傳統的編程方式,一般都設計好了各個模塊,通常模塊測試一次就可以了,但是目前設計總是因為功能不斷的增加和修改而改變,如果多次這樣,程序的質量和bug修正將是一個繁重困難的工作。JUnit在這種情況下,可以大大的提高工作效率,只要在第一次寫代碼的時候額外編寫測試代碼,以后所有的修改都可以實現自動的測試。
??? 同時因為自動測試的實現,XP編程方法才有了實現的可能。通過先寫好測試代碼,另一個角度看也就是我們要實現的功能,然后寫一個最簡單的使測試通過的代碼,再進行一個循環:改進-測試-通過-改進,直到代碼滿意,即使不太滿意但寫出的代碼也是可運行的。