隨筆 - 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 是通過反射機制來執(zhí)行每一個 test 方法,它通過匹配方法名 testXXX 來確定一個方法為需要執(zhí)行的測試 Case

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

          ?

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

          首先關注以下幾點:

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

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

          ?

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

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

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

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

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

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

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

          ?

          總結(jié)一下:

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

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

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

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

          ?

          Set up tear down

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

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

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

          ?

          這里有個測試的例子:

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

          ?????? runOnceBeforeAllTests() 被調(diào)用;

          bookNotAvailableInLibrary() 被調(diào)用;

          bookAvailableInCentralLibrary ()被調(diào)用;

          runAfterAllTests ()被調(diào)用,

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

          ?????? runOnceBeforeAllTests() 被調(diào)用;

          ?????? beforeTest() 被調(diào)用;

          bookNotAvailableInLibrary() 被調(diào)用;

          afterTest ()被調(diào)用;

          beforeTest() 被調(diào)用;

          bookAvailableInCentralLibrary ()被調(diào)用;

          afterTest ()被調(diào)用;

          runAfterAllTests ()被調(diào)用,

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

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

          ?

          錯誤處理:

          JUnit4.0 之前,對錯誤的測試,我們只能通過 fail 來產(chǎn)生一個錯誤,并在 try 塊里面 assertTrue true )來測試。現(xiàn)在,通過 @Test 標簽中的 expected 屬性,就可以更優(yōu)雅的測試錯誤了:

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

          ?

          其他的標簽:

          @ignore 標簽:

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

          ?

          @Test(timeout=xxx):

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

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

          ?

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

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

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

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

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 延长县| 汕头市| 五原县| 英吉沙县| 岳普湖县| 太保市| 监利县| 客服| 白城市| 济阳县| 平罗县| 红桥区| 枣阳市| 镇江市| 新安县| 湘阴县| 安阳县| 安阳市| 南丰县| 乌拉特中旗| 琼结县| 湘阴县| 建德市| 长丰县| 临洮县| 东乌| 深圳市| 镶黄旗| 平罗县| 绍兴县| 尉犁县| 博爱县| 论坛| 安岳县| 福海县| 龙井市| 偃师市| 蓬安县| 营山县| 安多县| 镶黄旗|