歡迎您光臨本站 註冊首頁

JUnit測試框架簡介

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework).Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟體如何(How)完成功能和完成什麼樣(What)的功能.Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了.

  junit特性:

  JUnit是一個開放源代碼的Java測試框架,用於編寫和運行可重複的測試.他是用於單元測試框架體系xUnit的一個實例(用於java語言).它包括以下特性:

  1、用於測試期望結果的斷言(Assertion)

  2、用於共享共同測試數據的測試工具

  3、用於方便的組織和運行測試的測試套件

  4、圖形和文本的測試運行器

  junit優點:

  另外junit是在極限編程和重構(refactor)中被極力推薦使用的工具,因為在實現自動單元測試的情況下可以大大的提高開發的效率,但是實際上編寫測試代碼也是需要耗費很多的時間和精力的,那麼使用這個東東好處到底在哪裡呢?筆者認為是這樣的:

  1、對於極限編程而言

  要求在編寫代碼之前先寫測試,這樣可以強制你在寫代碼之前好好的思考代碼(方法)的功能和邏輯,否則編寫的代碼很不穩定,那麼你需要同時維護測試代碼和實際代碼,這個工作量就會大大增加.因此在極限編程中,基本過程是這樣的:構思-> 編寫測試代碼-> 編寫代碼-> 測試,編寫測試和編寫代碼都是增量式的,寫一點測一點,在編寫以後的代碼中如果發現問題可以較塊的追蹤到問題的原因,減小回歸錯誤的糾錯難度.

  2、對於重構而言

  其好處和極限編程中是類似的,因為重構也是要求改一點測一點,減少回歸錯誤造成的時間消耗.

  3、對於非以上兩種情況

  junit我們在開發的時候使用junit寫一些適當的測試也是有必要的,因為一般我們也是需要編寫測試的代碼的,可能原來不是使用的junit,如果使用junit,針對介面(方法)編寫測試代碼會減少以後的維護工作,例如以後對方法內部的修改(這個就是相當於重構的工作了).另外就是因為junit有斷言功能,如果測試結果不通過會告訴我們那個測試不通過,為什麼,而如果是想以前的一般做法是寫一些測試代碼看其輸出結果,然後再由自己來判斷結果使用正確,使用junit的好處就是這個結果是否正確的判斷是它來完成的,我們只需要看看它告訴我們結果是否正確就可以了,在一般情況下會大大提高效率.

  安裝JUnit:

  安裝很簡單,先到以下地址下載一個最新的zip包:

  http://www.junit.org JUnit的網站,從該網站可以下載JUnit,並找到相關資料

  下載完以後解壓縮到你喜歡的目錄下,假設是JUNIT_HOME,然後將JUNIT_HOME下的junit.jar包加到你的系統的CLASSPATH環境變數中,對於IDE環境,對於需要用到的junit的項目增加到lib中,其設置不同的IDE有不同的設置,這裡不多講.

  JUnit最佳實踐:

  Martin Fowler說過:"當你試圖列印輸出一些信息或調試一個表達式時,寫一些測試代碼來替代那些傳統方法."一開始,你會發現你總是要創建一些新的Fixture,測試似乎使你的編程速度慢了下來.然而不久之後,你會發現你重複使用相同的Fixture,新的測試通常只涉及添加一個新的測試方法.

  你可能會寫許多測試代碼,但你很快就會發現你設想出的測試只有一小部分是真正有用的.你所需要的測試是那些會失敗的測試,即那些你認為不會失敗的測試,或你認為應該失敗卻成功的測試.

  我們前面提到過測試是一個不會中斷的過程.一旦你有了一個測試,你就要一直確保其正常工作,以檢驗你所加入的新的工作代碼.不要每隔幾天或才運行測試,每天你都應該運行一下測試代碼.這種投資很小,但可以確保你得到可以信賴的工作代碼.你的返工率降低了,你會有更多的時間編寫工作代碼.

  不要認為壓力大,就不寫測試代碼.相反編寫測試代碼會使你的壓力逐漸減輕,因為通過編寫測試代碼

  ,你對類的行為有了確切的認識.你會更快地編寫出有效率地工作代碼.

  下面是一些具體的編寫測試代碼的技巧或較好的實踐方法:

  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.測試要儘可能地小,執行速度快.

  11.不要硬性規定數據文件的路徑.

  12.利用Junit 的自動異常處理書寫簡潔的測試代碼

  事實上在Junit 中使用try-catch 來捕獲異常是沒有必要的,Junit 會自動捕獲異常.那些沒有被捕獲的異常就被當成錯誤處理.

  13. 充分利用Junit 的assert/fail 方法

  assertSame()用來測試兩個引用是否指向同一個對象

  assertEquals()用來測試兩個對象是否相等

  14. 確保測試代碼與時間無關

  15. 使用文檔生成器做測試文檔.

  JUnit和ant結合

  ant 提供了兩個 target : junit 和 junitreport 運行所有 測試用例 ,並生成 html 格式的報表

  具體操作如下:

  1.將 junit.jar 放在 ANT_HOMElib 目錄下

  2.修改 build.xml ,加入如下 內容:

  -------------- One or more tests failed, check the report for detail… -----------------------------

  運行 這個 target ,ant 會運行每個 TestCase,在 report 目錄下就有了 很多 TEST*.xml 和 一些網頁打開 report 目錄下的 index.html 就可以看到很直觀的測試運行報告,一目了然.

  在Eclipse中開發、運行JUnit測試相當簡單.因為Eclipse本身集成了JUnit相關組件,並對JUnit的運行提供了無縫的支持.


[火星人 ] JUnit測試框架簡介已經有679次圍觀

http://coctec.com/docs/java/show-post-59781.html