Junit目前在一些大的公司或者相對規範的軟件中使用的比較多,至關多的小公司並無把單元測試看的過重要。在大點的公司開發人員天天上班後,第一件事情就是從svn上把本身負責的代碼checkout下來,而後運行單元測試,若是單元測試經過,那麼說明本身的代碼沒有問題,而後就在代碼塊上修改與添加,完成後再用junit進行測試,測試完成後若是沒有問題,那麼就把相應的代碼塊提交給svn上。java
測試通常分爲:單元測試、集成測試(主要看一塊代碼加進去後,系統會不會有問題)、驗收測試和壓力測試。eclipse
在之前的的項目中也用過Junit,當時的使用只是把Junit當成一個有多個main方法的一個函數。假如一個項目很是的大,測試的東西很是的多,若是不用Junit的話,那麼這個工做量是很是大的。單元測試的最基本的一個功能是能進行自動化測試。單元測試都是經過斷言的方式來肯定結果是否正確,即便用Assert。maven
一、從網站上下載junit的新版本,http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22 上下載相應的版本,這裏下載的是junit4.10ide
二、在myeclipse中新建一個java項目,名稱爲junit01,並在新建一個文件夾,名稱爲lib,把上面下載的junit-4.10複製到裏面,並build path,即添加到類路徑中,以下圖所示:
svn
三、新建一個類Calcuate,其功能主要實現加減乘除,以下圖所示,其所在的包爲cn.whp.util
函數
四、建立上面的類Calcuate中新建測試類,首先在myeclipse中建立一個source folder,將其命名成test,而後在其下建立一個與類Calcuate類在相同包的包,以下圖所示:
性能
五、junit3與junit4的區別仍是比較明顯的,在junit3中,若是某個類是測試類,必須將其繼承類TestCase,若是某個方法是測試方法,必須讓這個方法以testXX開頭,若是但願指定某個測試方法運行以前運行某個初始化方法,這個方法的名稱必須是setUp,若是但願在某個測試方法運行以後運行某個釋放資源的方法,這個方法的名稱必須是tearDown。單元測試
在junit4中,一個POJO類就是一個測試類,測試方法經過@Test來標識,初始化方法經過@Before來標識,釋放資源的方法經過@After來標識,可是爲了讓junit4的測試類在junit3中也可使用,習慣於把初始化方法命名爲setUp,釋放資源的方法命名爲tearDown。Test中的測試方法通常以Test來開始。其中標識爲Before註解的方法,每次運行測試類,都會執行標識爲@After與@Before的方法。以下圖所示:
測試
六、在junit4中提供了一個Assert的類,這個類中有大量的靜態方法進行斷言的處理,在junit3中因爲繼承了TestCase,這個TestCase就能夠直接assert,而junit4中須要先引入Assert類。以下圖:
在上圖中使用了Assert類中的assertEquals方法,這方法的第一個參數意思是:若是方法cal.add(12,22)計算的結果不爲34,那麼就會打印出「加法有問題」的信息。第二個參數爲方法cal.add(12,22)的執行結果,第三個參數是開發人員預計的函數cal.add(12,22)執行後的結果,這裏預計12與22相加後其結果爲34,若是在執行測試方法後,rel不等於34,那麼就會報加法有問題。若是結果等於34,那麼這個方法就測試經過。把上圖中最後一個參數的值34改爲35,那麼執行junit測試後將會出現以下錯誤:
若是想讓上面的測試類能夠在junit3中運行,能夠把Assert類靜態的導入,這樣在調用每一個靜態方法時,就不用都寫上Assert類了,以下圖所示:網站
而後把全部別的測試方法補全,使用junit測試比使用main方法測試有很大的不一樣的,每一個標識爲@Test的方法都是一個可運行的方法,而且他們之間互不影響,例如testAddd方法出現問題了,並不影響testMinus方法的運行。這就是單元測試的好處,以下圖:
七、在測試除法cal.divide(3,0),若是除數爲0,這個方法應該會拋出異常。如今的測試目標是,若是運行測試方法後,測試方法沒有拋出異常,那麼這個測試方法就不能經過。這時就須要用到junit的ArithmeticException。以下圖所示:
這裏若是把cal.divide(20,0)改爲cal.divide(20,10),這樣divide是沒有問題的,可是這時測試類中的testDivideException方法執行junit測試後就不能經過了,由於這個測試方法已經斷言所要測試的方法divide要拋出異常,結果沒有拋出異常,因此junit測試是不能經過的。以下圖所示:
測試結果提示,應該拋出一個異常,結果沒有拋出異常。
八、有時在測試時須要有這樣的需求,就是對一個方法的時間進行測試,例如,要讓一個方法,200毫秒裏運行完,若是這個方法200毫秒不能運行完,那麼這個方法就應該拋出異常,示例中將方法time中線程沉睡300毫秒,那麼這個方法就不可能在200毫秒內完成,因此這個方法就會拋出異常。這就能夠作一些方法性能上的測試,把Thread去掉,那麼這個測試就可正常經過。以下圖所示:
十、Junit的最基本的東西基本是這樣的,斷言、測試異常,捕獲異常,測試方法的性能。例子代碼在附件中。