• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    JUnit學習筆記之NetBeans篇

    發布: 2007-6-22 07:38 | 作者: Didizyp  | 來源: CSDN  | 查看: 74次 | 進入軟件測試論壇討論

    領測軟件測試網

       

    一、簡介
      本文與之前的《JUnit學習筆記》所記述的內容是一致的,只不過IDE換成了最近開始試用的NetBeans。NetBeans是新近流行的一款堪與Eclipse媲美的IDE,有Sun的支持,最新版本5.0RC2,本文使用的是4.1中文版,可以從www.netbeans.org下載。
      JUnit是一款由Erich Gamma(《設計模式》的作者)和Kent Beck(極限編程的提出者)編寫的開源的回歸測試框架,供Java編碼人員做單元測試之用,可以從www.junit.org網站上免費獲得。本文使用的是NetBeans自帶的JUnit 3.8.1。
    二、創建項目
      下面打開NetBeans,然后點擊菜單“文件”->“新建項目”,打開“新建項目”對話框:

    JUnit學習筆記之NetBeans篇(圖一)

    請在“類別”中選擇“常規”,再從“項目”中選擇“Java應用程序”,然后點擊“下一步”,進入“新建Java應用程序”對話框: 

    JUnit學習筆記之NetBeans篇(圖二)

    在這個對話框中需要設置項目的名稱以及項目所在目錄,我為自己的項目起名為JUnitTest,“項目位置”為G:\YPJCCK\JUnit\NetBeans,此外,請將“創建主類”前的對號去掉。項目創建好后,已經自帶了JUnit 3.8.1。
    三、編寫用于測試的JavaBean
      用于測試的JavaBean很簡單,名為Book,只有id和name兩個屬性,這兩個屬性將分別用于兩個用例當中。下面開始編寫該JavaBean。
      請點擊“文件”->“新建文件”,打開“新建文件”對話框:

    JUnit學習筆記之NetBeans篇(圖三)

    確保“項目”選擇的是JUnitTest,然后在“類別”中選中Java類,在“文件類型”中選中Java類,點擊“下一個”,進入下一窗口:

    JUnit學習筆記之NetBeans篇(圖四)

    設置類名為Book,包為net.zheng.junit.test,設置完成后點擊“完成”,修改代碼如下:
      package net.zheng.junit.test;

      public class Book {
        private String id = null;
        private String name = null;

        public String getId() {
          return id;
        }
        public void setId(String id) {
          this.id = id;
        }
        public String getName() {
          return name;
        }
        public void setName(String name) {
          this.name = name;
        }
      }
    至此,用于測試的JavaBean編寫完成。
    四、編寫測試用例
      這里只用了一個類進行測試,名為BookTest,該類繼承自junit.framework.TestCase類。BookTest類包含兩個用例,分別對應該類的testId和testName方法,即每個方法實現了一個測試用例。注意,在JUnit中,junit.framework.TestCase的子類中每個用來實現測試用例的方法都必須以testXXX的格式來命名,這些方法在運行時會被執行。此外,BookTest還包括setUp和tearDown這兩個方法,前者在每個測試方法開始之前執行,多用來做初始化;后者在每個測試方法完成之后執行,多用來清理資源。下面開始編寫BookTest。
      請點擊“文件”->“新建文件”,打開“新建文件”對話框:

    JUnit學習筆記之NetBeans篇(圖五)

    確保“項目”選擇的是JUnitTest,然后在“類別”中選中JUnit類,在“文件類型”中選中現有類的測試,點擊“下一個”,進入下一窗口:

    JUnit學習筆記之NetBeans篇(圖六)

    選擇要測試的類,點擊“完成”,修改代碼如下:
      package net.zheng.junit.test;

      import junit.framework.TestCase;
      import junit.framework.Assert;

      public class BookTest extends TestCase {
        Book book = null;

        //建議為測試類創建構造
        public BookTest(String name) {
          super(name);
        }

        protected void setUp() throws Exception {
          //調用超類的setUp(),以確保測試環境被初始化
          super.setUp();

          System.out.println("測試開始!");
          book = new Book();
          System.out.println("book對象被初始化!");
        }

        protected void tearDown() throws Exception {
          System.out.println("book對象將被清理!");
          book = null;
          System.out.println("測試結束!");

          //調用超類的tearDown(),以確保測試環境被清理
          super.tearDown();
        }

        public void testId() {
          book.setId("001"); //設置id屬性的值為001
          //使用Assert查看id屬性的值是否為001
          Assert.assertEquals("001", book.getId());
          System.out.println("id屬性被測試!");
        }

        public void testName() {
          book.setName("ASP"); //設置name屬性的值為ASP
          //使用Assert查看name屬性的值是否為JSP,這是個必然出現錯誤的測試
          Assert.assertEquals("JSP", book.getName());
          System.out.println("name屬性被測試!");
        }
      }
    這里setUp和tearDown方法沒什么好說的,就是執行了對book對象的初始化和清理,不過testId和testName需要說明一下。前者是在對book的id屬性進行測試,首先賦值為”001”,然后使用Assert的assertEquals方法查看id屬性中存放的值是否是期待的值,由于我的期待值也是”001”,所以執行后這個用例應該是成功的;后者則是對book的name屬性進行測試,也是首先賦值為”ASP”,然后使用Assert的assertEquals方法查看其值是否是期待的,由于我特意將期待值設定為根本不可能的”JSP”,因此這個用例執行后會出現一個錯誤。但請注意,由于我是特意要讓測試出現錯誤,所以將期待值設定成了不可能的值,如果你是測試人員,請千萬不要這么做,否則如果別的地方導致了錯誤,很容易給自己造成不必要的麻煩。
      下面簡單介紹一下上邊用到的靜態類junit.framework.Assert。該類主要包含8個方法:
      1.assertEquals()方法,用來查看對象中存的值是否是期待的值,與字符串比較中使用的equals()方法類似;
      2.assertFalse()和assertTrue()方法,用來查看變量是是否為false或true,如果assertFalse()查看的變量的值是false則測試成功,如果是true則失敗,assertTrue()與之相反;
      3.assertSame()和assertNotSame()方法,用來比較兩個對象的引用是否相等和不相等,類似于通過“==”和“!=”比較兩個對象;
      4.assertNull()和assertNotNull()方法,用來查看對象是否為空和不為空;
      5.fail ()方法,意為失敗,用來拋出錯誤。我個人認為有兩個用途:首先是在測試驅動開發中,由于測試用例都是在被測試的類之前編寫,而寫成時又不清楚其正確與否,此時就可以使用fail方法拋出錯誤進行模擬;其次是拋出意外的錯誤,比如要測試的內容是從數據庫中讀取的數據是否正確,而導致錯誤的原因卻是數據庫連接失敗。
    五、運行BookTest
      編寫好BookTest后,就可以運行了。請在“項目”欄中選中BookTest,點擊鼠標右鍵,選擇“運行文件”,測試信息會從“輸出”窗口輸出:

    JUnit學習筆記之NetBeans篇(圖七)

    六、測試套件
      當有多個測試類需要一次性進行測試時,可以使用測試套件來完成這項工作。
      在NetBeans中,點擊“文件”->“新建文件”,打開“新建文件”對話框:

    JUnit學習筆記之NetBeans篇(圖八)

    確保“項目”選擇的是JUnitTest,然后在“類別”中選中JUnit類,在“文件類型”中選中測試套件,點擊“下一個”,進入下一窗口:

    JUnit學習筆記之NetBeans篇(圖九)

    修改“類名”為AllTests,點擊“完成”,然后修改代碼如下:
      package net.zheng.junit.test;

      import junit.framework.*;

      public class AllTests extends TestCase {
        public AllTests(String testName) {
          super(testName);
        }

        public static Test suite() {
          TestSuite ts= new TestSuite("AllTests");
          ts.addTestSuite(BookTest.class);
          return ts;
        }
      }
    其中TestSuite是用來組織測試類的,通過其addTestSuite()方法將測試類添加到ts對象中,凡是添加到ts中的測試類都將在運行文件時被執行。此外,您也可以在定義ts對象時利用其構造函數將測試類添加給ts對象,例如:
      TestSuite ts = new TestSuite(BookTest.class);
    這并不會影響到后續使用addTestSuite()方法。測試套件的運行方法與之前一樣。
      此外,JUnit自身也提供了運行測試的環境,但需要在NetBeans中做一些改動,所以就不作詳細介紹了,這里只將代碼給出:
      package net.zheng.junit.test;

      import junit.framework.*;

      public class Test {
        public static void main(String[] args) {
          //使用TestSuite組裝測試類
          TestSuite ts = new TestSuite();
          ts.addTestSuite(TestBook.class);
          //textui,命令行方式
          junit.textui.TestRunner.run(ts);
          //swingui,Swing方式
          //junit.swingui.TestRunner.run(ts.getClass());
          //awtui,AWT方式
          //junit.awtui.TestRunner.run(ts.getClass());
        }
      }
    七、小結
      其實JUnit上手很容易,遠比想象的要簡單的多,但我覺得如何編寫測試類是很需要經驗的,因為許多時候,測試一個用例,但涉及到可能不止一個類;而有些時候,一個類可能是做為工具使用,里邊涉及很多內容,那么測試時是否還是只編寫一個測試類呢?關于這個話題,我想應該是仁者見仁、智者見智的,其實這才是測試的難題所在。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>