1、junit學習之junit的基本介紹

Junit目前在一些大的公司或者相對規範的軟件中使用的比較多,相當多的小公司並沒有把單元測試看的太重要。在大點的公司開發人員每天上班後,第一件事情就是從svn上把自己負責的代碼checkout下來,然後運行單元測試,如果單元測試通過,那麼說明自己的代碼沒有問題,然後就在代碼塊上修改與添加,完成後再用junit進行測試,測試完成後如果沒有問題,那麼就把相應的代碼塊提交給svn上。

測試一般分爲:單元測試、集成測試(主要看一塊代碼加進去後,系統會不會有問題)、驗收測試和壓力測試。

 

在以前的的項目中也用過Junit,當時的使用只是把Junit當成一個有多個main方法的一個函數。假如一個項目非常的大,測試的東西非常的多,如果不用Junit的話,那麼這個工作量是非常大的。單元測試的最基本的一個功能是能進行自動化測試。單元測試都是通過斷言的方式來確定結果是否正確,即使用Assert。

 

1、從網站上下載junit的新版本,http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22 上下載相應的版本,這裏下載的是junit4.10

2、在myeclipse中新建一個java項目,名稱爲junit01,並在新建一個文件夾,名稱爲lib,把上面下載的junit-4.10複製到裏面,並build path,即添加到類路徑中,如下圖所示:


 3、新建一個類Calcuate,其功能主要實現加減乘除,如下圖所示,其所在的包爲cn.whp.util

 

4、創建上面的類Calcuate中新建測試類,首先在myeclipse中創建一個source folder,將其命名成test,然後在其下創建一個與類Calcuate類在相同包的包,如下圖所示:

 


5、junit3與junit4的區別還是比較明顯的,在junit3中,如果某個類是測試類,必須將其繼承類TestCase,如果某個方法是測試方法,必須讓這個方法以testXX開頭,如果希望指定某個測試方法運行之前運行某個初始化方法,這個方法的名稱必須是setUp,如果希望在某個測試方法運行之後運行某個釋放資源的方法,這個方法的名稱必須是tearDown。

在junit4中,一個POJO類就是一個測試類,測試方法通過@Test來標識,初始化方法通過@Before來標識,釋放資源的方法通過@After來標識,但是爲了讓junit4的測試類在junit3中也可以使用,習慣於把初始化方法命名爲setUp,釋放資源的方法命名爲tearDown。Test中的測試方法一般以Test來開始。其中標識爲Before註解的方法,每次運行測試類,都會執行標識爲@After與@Before的方法。如下圖所示:


6、在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方法的運行。這就是單元測試的好處,如下圖: 

7、在測試除法cal.divide(3,0),如果除數爲0,這個方法應該會拋出異常。現在的測試目標是,如果運行測試方法後,測試方法沒有拋出異常,那麼這個測試方法就不能通過。這時就需要用到junit的ArithmeticException。如下圖所示:


 

這裏如果把cal.divide(20,0)改成cal.divide(20,10),這樣divide是沒有問題的,但是這時測試類中的testDivideException方法執行junit測試後就不能通過了,因爲這個測試方法已經斷言所要測試的方法divide要拋出異常,結果沒有拋出異常,所以junit測試是不能通過的。如下圖所示:

 測試結果提示,應該拋出一個異常,結果沒有拋出異常。

 

8、有時在測試時需要有這樣的需求,就是對一個方法的時間進行測試,例如,要讓一個方法,200毫秒裏運行完,如果這個方法200毫秒不能運行完,那麼這個方法就應該拋出異常,示例中將方法time中線程沉睡300毫秒,那麼這個方法就不可能在200毫秒內完成,所以這個方法就會拋出異常。這就可以做一些方法性能上的測試,把Thread去掉,那麼這個測試就可正常通過。如下圖所示: 

 

 10、Junit的最基本的東西基本是這樣的,斷言、測試異常,捕獲異常,測試方法的性能。例子代碼在附件中。 

發佈了39 篇原創文章 · 獲贊 71 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章