Junit單元測試java
一:Junit是什麼?程序員
Junit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma創建,逐漸成爲源於Kent Beck的sunit的xunit家族中最爲成功的一個。 Junit有它本身的Junit擴展生態圈。多數Java的開發環境都已經集成了Junit做爲單元測試的工具。框架
Junit是由 Erich Gamma 和 Kent Beck 編寫的一個迴歸測試框架。Junit測試是程序員測試,即所謂白盒測試,由於程序員知道被測試的軟件如何完成功能和完成什麼樣的功能。Junit是一套框架,繼承TestCase類,就能夠用Junit進行自動測試了。函數
二:單元測試工具
單元測試:是針對一個獨立的工做單元進行正確性驗證的測試。有時也被稱爲程序員測試,以同QA測試、客戶測試相區分。java的單元測試:在Java程序中,一個工做單元一般是指一個方法,那麼也就是對一個方法進行測試。Junit:是一個單元測試框架,方便程序員進行單元測試代碼的編寫。單元測試
三:Junit框架中的幾個對象類測試
(1) TestCase抽象類——定義測試中固定方法 ui
1.TestCase是Test接口的抽象實現,其構造函數TestCase根據輸入的測試名稱name建立一個測試實例。因爲每個TestCase在建立時都要有一個名稱,若某測試失敗了,即可識別出是哪一個測試失敗。 對象
2.TestCase類中包含的setup()、tearDown()方法。setUp()方法集中初始化測試所需的全部變量和實例,而且在依次調用測試類中的每一個測試方法以前再次執行setUp()方法。tearDown()方法則是在每一個測試方法以後,釋放測試程序方法中引用的變量和實例。 繼承
3.開發人員編寫測試用例時,只需繼承TestCase,來完成run方法便可,而後Junit得到測試用例,執行它的run方法,把測試結果記錄在TestResult之中。
(2)Assert靜態類——一系列斷言方法的集合
1. Assert包含了一組靜態的測試方法,用於指望值和實際值比對是否正確,即測試失敗,Assert類就會拋出一個AssertionFailedError異常,Junit測試框架將這種錯誤納入Failes並加以記錄,同時標誌爲未經過測試。若是該類方法中指定一個String類型的傳參則該參數將被作爲AssertionFailedError異常的標識信息,告訴測試人員改異常的詳細信息。
2. Junit 提供了6大類31組斷言方法,包括基礎斷言、數字斷言、字符斷言、布爾斷言、對象斷言。
3. 其中assertEquals內部邏輯判斷使用equals()方法,這代表斷言兩個實例的內部哈希值是否相等時,最好使用該方法對相應類實例的值進行比較。而assertSame內部邏輯判斷使用了Java運算符「==」,這代表該斷言判斷兩個實例是否來自於同一個引用,最好使用該方法對不一樣類的實例的值進行比對。asserEquals該方法對兩個字符串進行邏輯比對,若是不匹配則顯示着兩個字符串有差別的地方。ComparisonFailure類提供兩個字符串的比對,不匹配則給出詳細的差別字符。
(3)TestSuite測試包類——多個測試的組合
1. TestSuite類負責組裝多個TestCases。待測得類中可能包括了對被測類的多個測試,而TestSuit負責收集這些測試,使咱們能夠在一個測試中,完成所有的對被測類的多個測試。
2. TestSuite類實現了Test接口,且能夠包含其它的TestSuites。它能夠處理加入Test時的全部拋出的異常。
3. TestSuite處理測試用例有6個規約(不然會被拒絕執行測試)
A 測試用例必須是公有類
B 測試用例必須繼承與TestCase類
C 測試用例的測試方法必須是公有的
D 測試用例的測試方法必須被聲明爲Void
E 測試用例中測試方法的前置名詞必須是test
F 測試用例中測試方法誤任何傳遞參數
(4)TestResult結果類和其它類與接口
1. TestResult結果類集合了任意測試累加結果,經過TestResult實例傳遞個每一個測試的Run()方法。TestResult在執行TestCase是若是失敗會異常拋出
2. TestListener接口是個事件監聽規約,可供TestRunner類使用。它通知listener的對象相關事件,方法包括測試開始startTest,測試結束endTest,錯誤,增長異常addError和增長失敗addFailure
3. TestFailure失敗類是個「失敗」情況的收集類,解釋每次測試執行過程當中出現的異常狀況。其toString()方法返回「失敗」情況的簡要描述.
4、Junit測試技術存在的缺陷
junit要依靠第三方工具提供,並且在使用Junit時產生的測試代碼中存在不少因爲大量測試數據產生的重複性代碼。另外咱們傳統上認爲測試用例通常是數據,咱們編寫的測試代碼是爲了運行咱們的測試用例而寫的「驅動模塊」。
5、小結
在實際的測試中咱們測試Java中某個類的功能時經常須要執行一些共同的操做,咱們能夠經過用Junit框架中的對象類來實現這個需求,簡化了測試人員的操做,儘管Junit測試有時候很方便,可是也還存在着須要改進的地方。