麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JBuilder2005單元測試之JUnit框架

2019-11-18 13:06:55
字體:
供稿:網(wǎng)友

  簡單的框架
  
  JUnit是由Erich Gamma和Kent Beck開發(fā)的開源測試框架,JBuilder集成了這個(gè)框架并對此做了擴(kuò)展。JUnit之所以流行并為廣大的開發(fā)人員所推崇,一是因?yàn)樗鼘?shí)戰(zhàn)性強(qiáng),功能強(qiáng)大,二是因?yàn)樗鼘?shí)在簡單。一個(gè)產(chǎn)品或框架要能有生命力,最好都具備這樣的特點(diǎn)。
  
  簡單地講這個(gè)框架提供了許多斷言(assert)方法,答應(yīng)你設(shè)置測試的規(guī)則,如:assertEquals()、assertNull()、assertNotSame()、assertTrue()等方法,一個(gè)測試用例包括了多個(gè)斷言,當(dāng)運(yùn)行測試用例后,JUnit運(yùn)行器會報(bào)告哪些斷言沒有通過,開發(fā)人員就可順藤摸瓜搞個(gè)水落石出了。而傳統(tǒng)的測試方法需要將期望的結(jié)果用諸如System.out.  
  JUnit的測試框架類結(jié)構(gòu)很簡單,主要由3個(gè)類組成,其類圖關(guān)系如下圖所示:
   JBuilder2005單元測試之JUnit框架(圖一)
  圖 錯(cuò)誤!文檔中沒有指定樣式的文字。JUnit測試框架類結(jié)構(gòu)
  
  ·junit.framework.Test:測試接口。
  
  ·junit.framework.TestCase:測試用例類,業(yè)務(wù)類的測試用例類只需要承繼這個(gè)TestCase,根據(jù)情況編寫若干個(gè)public void testXxx()方法,在方法中通過assertYyy()定制若干測試規(guī)則就可以了。
  
  ·junit.framework.TestSuite:測試套件類,它可以將多個(gè)測試用例類捆綁在一起運(yùn)行,也可以捆綁另一個(gè)測試套件。
  
  測試固件(Fixture)
  
  一個(gè)測試用例可以包含若干個(gè)testXxx()測試方法,測試用例測試一個(gè)或多個(gè)類API接口的正確性,當(dāng)然在調(diào)用類API時(shí),需要事先創(chuàng)建這個(gè)類的對象及一些關(guān)聯(lián)的對象,這組對象就稱為測試固件(Fixture),相當(dāng)于測試用例的"工作對象"。
  
  我們在前面說過,一個(gè)測試用例類可以包含多個(gè)testXxx()方法,在運(yùn)行時(shí),每個(gè)測試方法都對應(yīng)一個(gè)測試用例類的實(shí)例。當(dāng)然,你可以在具體的testXxx()方法里聲明并實(shí)例化業(yè)務(wù)類的實(shí)例,在測試完成后再銷毀它們。但是,這么一來你就要在每個(gè)testXxx()方法中都重復(fù)這些代碼,因?yàn)門estCase實(shí)例被運(yùn)行時(shí),依照以下步驟運(yùn)行:
  
  1.創(chuàng)建測試用例的實(shí)例。
  
  2.調(diào)用setUp()方法,執(zhí)行一些初始化工作。
  
  3.運(yùn)行testXxx()測試方法。
  
  4.調(diào)用tearDown()方法,執(zhí)行銷毀對象的工作。
  
  假如測試用例類中有多個(gè)testXxx()方法,且它們都需要使用到相同的一組對象,我們可以在setUp()中實(shí)例化這組對象,并在tearDown()中銷毀它們。要編寫測試固件,依照以下步驟進(jìn)行:
  
  1.創(chuàng)建TestCase類的子類。
  
  2.在子類中聲明若干個(gè)測試所用的對象。
  
  3.覆蓋setUp()方法,在方法中實(shí)例化這些對象。
  
  4.覆蓋tearDown()方法,釋放這些對象的資源。
  
  如下面即是一個(gè)簡單的測試固件:
  
  代碼清單 錯(cuò)誤!文檔中沒有指定樣式的文字。測試固件
  
  1. public class MoneyTest extends TestCase
  2. {
  3.  private Money f12CHF;//12瑞士法郎
  4.  private Money f14CHF; //14瑞士法郎
  5.  private Money f28USD; //28美國美元
  6.  protected void setUp() {
  7.   f12CHF= new Money(12, "CHF");
  8.   f14CHF= new Money(14, "CHF");
  9.   f28USD= new Money(28, "USD");
  10.  }
  11.  protected void tearDown(){}
  12. }
  
  第3~5行聲明了3個(gè)Money類對象(測試固件),在setUp()方法中實(shí)例化這3個(gè)對象(第7~9行),由于這些對象可以被垃圾進(jìn)行直接回收,所以在tearDown()中不做任何操作。
  
  測試用例(TestCase)
  
  有了測試固件,就可以開始編寫測試用例的測試方法了。當(dāng)然你也可不需要測試固件而直接編寫測試用例方法。下面我們在測試固件的基礎(chǔ)上添加測試用例方法testMoneyBag(),代碼如下所示:
  
  代碼清單 錯(cuò)誤!文檔中沒有指定樣式的文字。測試用例方法
  
  1. public class MoneyTest extends TestCase
  2. {
  3.  private Money f12CHF;//12瑞士法郎
  4.  private Money f14CHF; //14瑞士法郎
  5.  private Money f28USD; //28美國美元
  6.  protected void setUp() {
  7.   f12CHF= new Money(12, "CHF");
  8.   f14CHF= new Money(14, "CHF");
  9.   f28USD= new Money(28, "USD");
  10. }
  11.  public void testMoneyBag()
  12.  {
  13.   Money bag[]= { f26CHF, f28USD };
  14.   MoneyBag eXPected= new MoneyBag(bag);
  15.   assertEquals(expected, f12CHF.add(f28USD.add(f14CHF)));
  16.  }
  17.  protected void tearDown(){}
  18. }
  
  測試方法都必須以test為前綴,且必須是public void的,運(yùn)行器以此為反射查找規(guī)則找到這些測試用例方法。在一個(gè)方法中可以包括多個(gè)assertYyy()方法,每個(gè)assertYyy()方法都是一個(gè)測試規(guī)則。像第15行的assertYyy()斷言方法即為測試Money的add()方法和MoneyBag類正確性的測試規(guī)則。
  
  你可以在MoneyTest中添加多個(gè)public void testXxx()方法,運(yùn)行器為每個(gè)方法生成一個(gè)測試用例實(shí)例,分別運(yùn)行。
  
  測試套件(TestSuite)
  
  假如每次只能運(yùn)行一個(gè)測試用例,那么又陷入了我們前面所談到的傳統(tǒng)測試的窘境:手工去運(yùn)行一個(gè)個(gè)測試用例,測試套件專門為解決這一問題而來。它通過TestSuite對象將多個(gè)測試用例組裝成到一個(gè)測試套件,則測試套件批量運(yùn)行。需要非凡指出的是,可以把一個(gè)測試套件整個(gè)添加到另一個(gè)測試套件中,就象小筐裝進(jìn)大筐里變成一個(gè)篋一樣。
  
  測試套件類也通過承繼TestCase類實(shí)現(xiàn),只不過它提供了一個(gè)public static Test suite()靜態(tài)方法,在該方法中將多個(gè)測試用例捆綁組裝在一起。一個(gè)典型的測試套件代碼如下所示:
  
  代碼清單 錯(cuò)誤!文檔中沒有指定樣式的文字。測試套件
  
  1. public class MoneyTestSuite extends TestCase
  2. {
  3.  public TestSuite1(String s)
  4.  {
  5.   super(s);
  6.  }
  7.  public static Test suite()
  8.  {
  9.   TestSuite suite = new TestSuite();
  10.  suite.addTestSuite(MoneyTest.class);
  11.   suite.addTestSuite(MoneyBag.class);
  12.   return suite;
  13.  }
  14. }
  
  在第9行中聲明并實(shí)例化了一個(gè)TestSuite,在第10、11行分別加入一個(gè)測試用例。你可以通過suite.addTest(Test t)方法添加一個(gè)套件。這樣運(yùn)行這個(gè)套件就可以自動(dòng)運(yùn)行所有測試用例的測試方法了。
  
  測試運(yùn)行器
  
  JUnit提供了3個(gè)標(biāo)準(zhǔn)的測試運(yùn)行器運(yùn)行這些測試用例或測試套件,這3個(gè)測試運(yùn)行器分別是:
  
  ·junit.textui.TestRunner:文本測試運(yùn)行器。
  ·junit.awtui.TestRunner:使用AWT
組件界面的測試運(yùn)行器。
  ·junit.swingui.TestRunner:使用Swing組件界面的測試運(yùn)行器。
  
  下面是基于AWT組件的測試運(yùn)行器,如下圖所示:
  JBuilder2005單元測試之JUnit框架(圖二)
  圖 錯(cuò)誤!文檔中沒有指定樣式的文字。AWT測試運(yùn)行器
  
  ·Test class name:指定測試用例類和測試套件類。
  
  ·一個(gè)進(jìn)度條:表示運(yùn)行測試的執(zhí)行進(jìn)度,進(jìn)度條下是正確、錯(cuò)誤、失敗的測試統(tǒng)計(jì)數(shù)。
  
  ·Error and Failures:列出了測試錯(cuò)誤和失敗的列表,點(diǎn)選其中的一個(gè)選項(xiàng)時(shí),JUnit在窗口底部列出錯(cuò)誤跟蹤跡。
  
  提示:
  
  JBuilder提供了方便的運(yùn)行測試用例和測試套件類的方法,你只須點(diǎn)擊鼠標(biāo)右鍵就可直接調(diào)用了。此外,JBuilder提供了一個(gè)JBTestRunner測試運(yùn)行器,在功能和易用性上非JUnit提供的測試運(yùn)行器所能媲美。JBuilder支持JUnit所提供的兩個(gè)測試運(yùn)行器:junit.textui.TestRunner和junit.swingui.TestRunner。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 激情毛片 | 欧美日韩中文字幕在线视频 | 日韩欧美精品电影 | 污版视频在线观看 | 欧洲成人一区 | 黄色片网站在线免费观看 | 亚洲卡通动漫在线观看 | 久久日韩 | 午夜精品在线视频 | 中文字幕在线播放第一页 | 女人裸体让男人桶全过程 | 操操插插| 久久精品日产高清版的功能介绍 | 免费在线中文字幕 | 日韩精品免费一区二区三区 | 欧美黄色大片免费观看 | 亚洲成人在线视频网 | 免费一级在线 | 黄色免费播放网站 | 亚洲第一综合 | 午夜久久视频 | 伊人午夜视频 | 九草在线视频 | 欧美一级做a | 成人福利在线观看 | 精品国产一区二区久久 | av在线日韩 | 久久经典视频 | 国产欧美亚洲精品 | 91成人免费看片 | 国产亚洲精品综合一区91 | 国产91亚洲精品一区二区三区 | 欧美一级高清免费 | 91麻豆精品国产91久久久无需广告 | 午夜爽爽爽男女免费观看hd | 亚洲一区二区三区高清视频 | 日本一区二区免费在线观看 | 国产精品久久久久久久久久久久久久久久 | 亚洲av一级毛片特黄大片 | 久久免费看片 | 久久国产一二区 |