在 Eclipse中使用JUnit實(shí)例

          測(cè)試對(duì)于保證軟件開發(fā)質(zhì)量有著非常重要的作用,單元測(cè)試更是必不可少,JUnit是一個(gè)非常強(qiáng) 大的單元測(cè)試包,可以對(duì)一個(gè)/多個(gè)類的單個(gè)/多個(gè)方法測(cè)試,還可以將不同的TestCase組合成TestSuit,使測(cè)試 任務(wù)自動(dòng)化。Eclipse同樣集成了JUnit,可以非常方便地編寫TestCase

            我們創(chuàng) 建一個(gè)Java工程,添加一個(gè)example.Hello類,首先我們給Hello類添加一個(gè)abs()方法,作用是返 回絕對(duì)值:

          Image
          (圖一)
            下一 步,我們準(zhǔn)備對(duì)這個(gè)方法進(jìn)行測(cè)試,確保功能正常。選中Hello.java,右 鍵點(diǎn)擊,選擇New->JUnit Test Case
          Image

          (圖二)
             Eclipse會(huì)詢問(wèn)是否添加junit.jar包,確定后新建一個(gè)HelloTest類,用來(lái)測(cè)試Hello類。
          Image

          (圖三)
            選中setUp()tearDown(),然后點(diǎn)擊“Next”
          Image

          (圖 四)  
            選擇要 測(cè)試的方法,我們選中abs(int)方法,完成后在HelloTest.java中輸入:
          Image


          (圖五)

             JUnit會(huì)以以下順序執(zhí)行測(cè)試:(大致的代碼

          try {
          HelloTest test = new HelloTest(); //
          建立測(cè)試類實(shí)例
          test.setUp(); //
          初始化測(cè)試環(huán)境
          test.
          testAbs(); // 測(cè)試某個(gè)方法
          test.tearDown(); //
          清理資源
          }
          catch…


            setUp()是建立測(cè)試環(huán)境,這里創(chuàng)建一個(gè)Hello類的實(shí)例;tearDown()用于清理資源,如釋放打開的文件等等。以test開頭的方法被認(rèn)為是測(cè)試方法,JUnit會(huì)依次執(zhí)行testXxx()方法。在testAbs()方法中,我們對(duì)abs()的測(cè)試分別選擇 正數(shù),負(fù)數(shù)和0,如果方法返回值與期待結(jié)果相同,則assertEquals不會(huì)產(chǎn)生異常。

            如果有 多個(gè)testXxx方法,JUnit會(huì)創(chuàng)建多個(gè)XxxTest實(shí)例,每次 運(yùn)行一個(gè)testXxx方法,setUp()tearDown()會(huì)在testXxx前后被調(diào)用,因此,不要在一個(gè)testA()中依賴testB()

            直接運(yùn) 行Run->Run As->JUnit Test,就可 以看到JUnit測(cè)試結(jié)果:
          Image

          (圖六)
            綠色表 示測(cè)試通過(guò),只要有1個(gè)測(cè)試未通過(guò),就會(huì)顯示紅色并列出未通過(guò)測(cè)試的方法。可以試圖改變abs()的代碼,故意返回錯(cuò)誤的結(jié)果(比如return n+1;),然后再運(yùn)行JUnit就會(huì)報(bào)告錯(cuò)誤。

            如果沒(méi) 有JUnit面板,選擇Window->Show View->Other,打開JUnitView
          Image

          (圖七)
            JUnit通過(guò)單元測(cè)試,能在開發(fā)階段就找出許多Bug,并且,多個(gè)Test Case可以組合成Test Suite,讓 整個(gè)測(cè)試自動(dòng)完成,尤其適合于XP方法。每增加一個(gè)小的新功能或者對(duì)代碼進(jìn)行了小的修改,就立刻運(yùn)行一 遍Test Suite,確保新增和修改的代碼不會(huì)破壞原有的功能,大大增強(qiáng)軟件的可維護(hù) 性,避免代碼逐漸腐爛

                                                                                                                                                                                                                                                                  

          初次學(xué)會(huì)使用Junit的使用是通過(guò)這篇文章的(上文),自己嘗試跟著做了一遍,結(jié)果發(fā)現(xiàn)它上面提供的代碼例子是錯(cuò)誤 的,不過(guò)流程、圖片都很清楚。所以你可以先看看它上面是怎么說(shuō)的,至于測(cè)試的代碼我稍做了改動(dòng),為的是只要說(shuō)明問(wèn)題就行——其實(shí)不難。
          被測(cè)試的類代碼:
          public class HelloJunit {
              public static int abs(int n){
                  return n>=0?n:(-n);
              }
          }
          Junit
          的測(cè)試代碼:
          import junit.framework.TestCase;
          public class HelloJunitTest extends TestCase {
              public void testAbs() {
                assertEquals(HelloJunit.abs(10),10); 
                assertEquals(HelloJunit.abs(-10),10);
              }
          }
          主要代碼 行為assertEquals(HelloJunit.abs(10),10); 
          其中參數(shù) 的意義為:
          HelloJunit.abs(10)執(zhí)行類HelloJunitabs方法(參數(shù)為10,表示求10的絕對(duì)值)。
          逗號(hào)后面 的10表示為預(yù)期的結(jié)果(期望值)。
          該行表示 將期望值(10)與實(shí)際值(類HelloJunitabs方法執(zhí)行結(jié)果)進(jìn)行比較,如果不相 等則拋出異常。
          這里只是 一個(gè)簡(jiǎn)簡(jiǎn)單單的例子,Junit被大家稱為優(yōu)秀的白盒自動(dòng)化測(cè)試框架,當(dāng)然只有自己用過(guò)了才會(huì)了解。網(wǎng)上有許多的資料介紹這個(gè)框架,筆 者也是從自身情況出發(fā)來(lái)學(xué)習(xí)它的。當(dāng)然學(xué)習(xí)使用它是需要有一定基礎(chǔ)的,筆者擁有CC++的基礎(chǔ),對(duì)Java的學(xué)習(xí)也開始不久,所以在這里將力 所能及的知識(shí)共享出來(lái)與大家分享,希望能夠共同提高。另外筆者是專職的測(cè)試人員,所以在描述一些問(wèn)題時(shí)大多都會(huì)以測(cè)試的角度來(lái)闡述。學(xué)習(xí)此框架的目的在于 能夠在工作中進(jìn)行白盒測(cè)試,在以后的介紹中還會(huì)介紹白盒測(cè)試相關(guān)的理論和工具,希望大家能夠一起提高進(jìn)步。

          posted on 2010-07-20 09:40 smallfa 閱讀(1125) 評(píng)論(0)  編輯  收藏 所屬分類: myeclipse


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


          網(wǎng)站導(dǎo)航:
           
          <2010年7月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          smallfa
          博客園
          C++博客
          博客生活
          Blogjava
          足球博客
          微博
          Redsaga

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          Ajax

          Blogs

          DB

          java

          Open source

          ORM

          Tools/Help

          vedio Tech

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 宜宾市| 余干县| 青川县| 华阴市| 个旧市| 永春县| 潞西市| 庐江县| 新余市| 临洮县| 满洲里市| 安多县| 长治市| 乾安县| 甘南县| 庄河市| 凤城市| 江孜县| 湄潭县| 延津县| 林州市| 台东市| 海南省| 云和县| 遂宁市| 沛县| 海原县| 汉川市| 兴和县| 泸定县| 嘉义市| 新干县| 雅安市| 佛学| 上杭县| 隆德县| 吴旗县| 鄯善县| 视频| 巴楚县| 陇南市|