隨筆 - 115  文章 - 481  trackbacks - 0
          <2006年11月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          這篇文章算是一個翻譯了。分成兩部分,集合了兩篇 JUnit.org 上的推薦文章,這里是原文的地址:

          http://www.instrumentalservices.com/index.php?option=com_content&task=view&id=45&Itemid=52

          http://www.devx.com/Java/Article/31983

          ?

          JUnit 我就不多做介紹了, Kent Beck Erich Gamma 的作品。這里主要講一下在 JUnit 4.0 4.1 版本中的一些改進和新的用法。

          要很好的使用 JUnit 4.x ,必須要 Java SE 5.0 ,因為這個版本最大的變化就是加入了大量的 Annotation 的使用。

          來通過一個例子看下,首先是一個老版本的測試案例:

          有幾點需要關注:

          1 —— 一個測試案例必須要繼承自 TestCase

          2 —— JUnit 是通過反射機制來執行每一個 test 方法,它通過匹配方法名 testXXX 來確定一個方法為需要執行的測試 Case 。

          3 —— 使用一個或幾個 assertXXX 方法來驗證我們的情況。

          ?

          好,現在使用 JUnit 4.x 來實現相同的測試,從中,我們就能看到一些新的東西:

          首先關注以下幾點:

          1 ——我們的測試類并沒有 extends TestCase 類了,

          2 ——我們的測試方法并沒有以 test 開頭,而是使用了 @Test 標簽來標記該方法是一個需要測試的方法。

          ?

          下面的圖標示了用 JUnit 4.x 我們需要做的事情:

          1 ——我們需要引進 org.junit.Test 標簽,還有很多標簽都在 org.junit.* 包里面。

          2 ——引進 static assertEquals 靜態方法,引入靜態方法也是 Java 5 的一個新的特性,避免了使用過長的應用方法名。

          3 ——引進 JUnit4TestAdapter ,這是一個和老版本 JUnit 工具合用的適配器。

          4 ——使用 @Test 標簽來申明一個方法需要測試。

          5 ——直接使用需要的 assert 方法

          6 ——使用一個 main 方法來用 JUnit4TestAdapter 在老的 Junit runner 上運行新的測試。

          ?

          總結一下:

          l???????? 使用一個普通的類,而不必繼承自 Junit.framework.TestCase 。

          l???????? 使用 @Test 標簽來標記一個方法是一個測試方法。

          l???????? 使用一個 assert 方法。在新版本的 Junit 中, assert 方法和老方法沒有什么區別。并且使用靜態方法引入,( static import )特性來簡化方法的使用。

          l???????? 使用 JUnit4TestAdapter 來運行測試。

          ?

          Set up tear down

          新版本的 JUnit 提供了兩個新的標簽來使用 set up tear down

          @Before :使用了該標記的方法在每個測試方法執行之前都要執行一次。

          @After :使用了該標記的方法在每個測試方法執行之后要執行一次。

          ?

          這里有個測試的例子:

          如果我們在所有的方法中都添加一個 System.out.println() 方法,執行的結果會像這樣:

          ?????? runOnceBeforeAllTests() 被調用;

          bookNotAvailableInLibrary() 被調用;

          bookAvailableInCentralLibrary ()被調用;

          runAfterAllTests ()被調用,

          而如果我們還有一個 @Before beforeTest() 方法和一個 @After afterTest() 方法,那么執行的結果會是這樣:

          ?????? runOnceBeforeAllTests() 被調用;

          ?????? beforeTest() 被調用;

          bookNotAvailableInLibrary() 被調用;

          afterTest ()被調用;

          beforeTest() 被調用;

          bookAvailableInCentralLibrary ()被調用;

          afterTest ()被調用;

          runAfterAllTests ()被調用,

          從這里我們就可以看出兩者的區別了。

          另外一點, @Before @After 標示的方法只能各有一個。

          ?

          錯誤處理:

          JUnit4.0 之前,對錯誤的測試,我們只能通過 fail 來產生一個錯誤,并在 try 塊里面 assertTrue true )來測試?,F在,通過 @Test 標簽中的 expected 屬性,就可以更優雅的測試錯誤了:

          在這段代碼中,我們為 @Test 標簽添加了 expected 屬性,并提供了一個 BookNotAvailableException ,那么在這段測試中,如果代碼沒有拋出這個類型的錯誤,測試就失敗了,如果正確拋出該類型錯誤,測試通過。

          ?

          其他的標簽:

          @ignore 標簽:

          該標簽標記的測試方法在測試中會被忽略。當測試的方法還沒有實現,或者測試的方法已經過時,或者在某種條件下才能測試該方法(比如需要一個數據庫聯接,而在本地測試的時候,數據庫并沒有連接),那么使用該標簽來標示這個方法。同時,你可以為該標簽傳遞一個 String 的參數,來表明為什么會忽略這個測試方法。比如: @lgnore(“ 該方法還沒有實現 ”) ,在執行的時候,僅會報告該方法沒有實現,而不會運行測試方法。

          ?

          @Test(timeout=xxx):

          該標簽傳入了一個時間(毫秒)給測試方法,

          如果測試方法在制定的時間之內沒有運行完,則測試也失敗。

          ?

          這篇文章就到這里,其實 JUnit4.x 里面還有很多標簽的用法,將在明天的 blog 中繼續。

          ?(注:本文作者,EasyJF開源團隊 stef_wu,轉載請保留作者聲明!)

          posted on 2006-11-19 19:27 簡易java框架 閱讀(2516) 評論(1)  編輯  收藏

          FeedBack:
          # re: 10分鐘了解junit 4 2006-11-20 11:46 一滴水
          和.net 的 NUnit 靠攏了 哈哈,基本思想一樣  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 江津市| 永胜县| 育儿| 曲沃县| 五河县| 台东县| 新蔡县| 华坪县| 民勤县| 澎湖县| 牡丹江市| 黑龙江省| 辽阳县| 巴彦县| 锡林浩特市| 温州市| 额济纳旗| 双辽市| 镇江市| 邯郸市| 石棉县| 永新县| 阿瓦提县| 石泉县| 丹阳市| 遵义市| 新乐市| 上犹县| 县级市| 韶关市| 宝坻区| 万载县| 武穴市| 师宗县| 昂仁县| 平谷区| 平泉县| 凉山| 丰原市| 齐齐哈尔市| 鹰潭市|