乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      “JUnit4.0 in 10 minutes” learning minutes

       moonboat 2007-07-02

      “JUnit4.0 in 10 minutes” learning minutes

      TestNGJUnit嘴仗似乎告一段落了,Gunjan Doshi今天發(fā)布了一個(gè)"JUnit 4.0 in 10 Minutes: A Quick Reference Guide",學(xué)習(xí)筆記如下。

      注:所有代碼和插圖都來自于原文。

      首先來看看JUnit4.0以前,我們怎樣編寫測試用例:

      Old JUnit Test Case

      1. 測試用例必須繼承自"junit.framework.TestCase";
      2. 測試用例函數(shù)必須以"test"開頭;
      3. 用assert的系列函數(shù)來驗(yàn)證結(jié)果。

      如果用JUnit4.0重寫,將是這個(gè)樣子:

      JUnit4.0 Test Case

      1. 不用再繼承自"junit.framework.TestCase",TestNG批評JUnit的一個(gè)方面就是在JUnit中,每一個(gè)測試用例都會(huì)實(shí)例化一份TestCase,帶來效率的降低。JUnit4.0確實(shí)修改了這樣的設(shè)計(jì)。
      2. 測試函數(shù)名稱不用再以"test"開頭,而用Annotation"@Test"來修飾;
      3. assert系列函數(shù)沒有大的改變;
      4. 如果希望用老的JUnit Runner來運(yùn)行JUnit4.0的測試用例,需要用Junit4TestAdapter來Adapt一下。
      5. 或者可以用新的JUnit4的Runner來運(yùn)行。

      1. java org.junit.runner.JUnitCore LibraryTest

       

      其中,用"@Test" Annotation來修飾測試用例是JUnit4.0的一個(gè)大Feature,這也正是這種Metadata應(yīng)該發(fā)揮作用的地方。

      "@Test"有兩個(gè)非常有用的參數(shù):

      1) 預(yù)期會(huì)拋出的異常檢測

      "@Test"的"expected"參數(shù)用來說明希望拋出的異常,如果運(yùn)行時(shí)沒有拋出這個(gè)異常,測試用例就被標(biāo)識為失敗。

       

      2) 預(yù)期運(yùn)行時(shí)間Expected exception

      "@Test"有一個(gè)timeout的參數(shù)用來說明這個(gè)測試用例運(yùn)行的時(shí)間最長應(yīng)該為多少,如果時(shí)間超出,則標(biāo)識為失敗。

      1. @Test (timeout=10)

      TestNG批評JUnit的另一個(gè)方面是所有的測試用例函數(shù)都會(huì)在測試執(zhí)行前執(zhí)行setUp,在測試后執(zhí)行tearDown,不僅效率很低,也會(huì)帶來很多問題(比如一次性的數(shù)據(jù)庫鏈接等等)。

      JUnit4.0這樣解決這個(gè)問題:

      引入Annotation"Before", "After", "BeforeClass", "AfterClass"。

      "Before"修飾的函數(shù)將會(huì)在每個(gè)測試運(yùn)行前運(yùn)行,"After"修飾的函數(shù)將在每個(gè)測試用例運(yùn)行后運(yùn)行。JUnit4.0支持任意數(shù)量的"Before"和"After" Annotation,并且支持繼承。"Before"修飾函數(shù)的執(zhí)行順序?yàn)楦割惖脑谇?,繼承類在后,"After"則相反,繼承類在前,父類在后。

      new before and after annotation

      "BeforeClass"修飾的函數(shù)將會(huì)在所有的測試用例運(yùn)行前運(yùn)行一次(只運(yùn)行一次), "AfterClass"則會(huì)在所有的測試用例運(yùn)行后運(yùn)行一次(只運(yùn)行一次)。

      BeforeClass annotation

      JUnit4.0還有一個(gè)有用的Annotation "@Ignore",它用來修飾將被忽略的函數(shù),用"@Ignore"修飾的測試用例函數(shù)將不會(huì)執(zhí)行。這個(gè)Annotation支持一個(gè)字符串參數(shù),用來說明忽略的原因,比如:

      1. @Ignore(Database is down)

       

      TestNG則采用配置文件的辦法解決這個(gè)問題,兩種方法各有利弊。

      Reference:

      JUnit 4.0 in 10 Minutes: A Quick Reference Guide [PDF] - Gunjan Doshi

      注:所有代碼和插圖都來自于原文

      Popularity: 24%

      Related entries:

      TDD, JUnit, TestNG

      July 9, 2005

      前兩天注意到TheServerSide上一個(gè)挺老的新聞,TestNG陣營認(rèn)為JUnit在最新的4.0版本中“抄襲”了他們的Idea,TestNG的Co-Founder分別在自己的Blog上發(fā)言來證明(Cedric Beust:JUnit 4 overview,Alexandru Popescu:JUnit 4.0),Erich Gamma則留言反擊,聽起來滿有意思,于是我也順便研究了一下TestNG。

      "…I’m not quite sure what is the driving vision behind JUnit 4 (besides TestNG :-) )".

      I’m glad that there is TestNG, but there are also other interesting testing framework efforts. In particular there is NUnit.NUnit has introduced using annotations in testing frameworks a while ago. Most of the requests for annotation based tests came from the dual NUnit/JUnit users. So we are listening to the community.

      Posted by: Erich Gamma at June 11, 2005 09:02 AM

      先來說說TDD(Test Driven Development)- 測試驅(qū)動(dòng)開發(fā),想了解TDD,最好看看Kent Back的《測試驅(qū)動(dòng)開發(fā)》,里面詳細(xì)的講述了TDD的原理、實(shí)踐。不過,我覺得,只有你真正的去用了,才能體會(huì)到測試驅(qū)動(dòng)開發(fā)給你帶來的好處。

      我覺得,TDD給我們帶來的好處有很多:

      1)從功能需求入手,設(shè)計(jì)對象,在寫TestCase的時(shí)候其實(shí)就是對象設(shè)計(jì)的時(shí)候,這樣,TestCase寫好寫全了,對象也就設(shè)計(jì)好了;

      2)可以在開發(fā)階段找到很多Bug(尤其是很多邊緣測試的情況),減少后期Debug的時(shí)間;

      3)減少由于重構(gòu)或者Fix其它Bug的時(shí)候帶來的Regression。

      全部測試通過,開發(fā)也就結(jié)束了,真的很有幫助。

      舉個(gè)例子,比如Xerdoc DSearch中JPEG Parser Plugin的開發(fā)。首先從功能需求的角度出發(fā),這個(gè)Parser要負(fù)責(zé)解析出JPEG文件的EXIF頭信息,那么ok,我就設(shè)計(jì)一個(gè)ExifInfo的解析Parser類。然后開始寫TestCase。

      1. public void testParseExifInfor() {
      2.         String filePath = "P8040002.JPG";
      3.         File picFile = new File(filePath);
      4.         ExifInfor exif = new ExifInfor(filePath);
      5.        
      6.         assertTrue(exif != null);
      7.         assertEquals(600, exif.getWidth());
      8.         assertEquals(true, exif.isColor());
      9.          
      10.           ... ...
      11. }

      在進(jìn)行測試用例(TestCase)設(shè)計(jì)的時(shí)候,我們就可以設(shè)計(jì)出ExifInfor類的基本接口,剩余的工作可以留到重構(gòu)(Refactoring:是XP Programming中另一個(gè)非常棒的概念。)的時(shí)候進(jìn)行了。

      當(dāng)然,測試用例要Cover盡可能多的情況,比如不標(biāo)準(zhǔn)的Exif信息等等,當(dāng)開發(fā)結(jié)束,所有的測試都通過的時(shí)候,你就可以沖上一杯咖啡,來想想重構(gòu)的事兒了(當(dāng)然,重構(gòu)完畢還是需要用TestCase來檢驗(yàn)重構(gòu)的結(jié)果的,呵呵)。

      TestNG(Test Next Generation - The next generation of unit testing),顧名思義,目標(biāo)直指下一代的測試框架。

      TestNG比起JUnit來說,變化主要表現(xiàn)在:

      1)最大的不同就是TestNG利用了JavaSE 5.0中的Annotations(JSR175)來代替test開頭的用例函數(shù)名(TestNG說,現(xiàn)有IDE大多都按照函數(shù)名排序了,test打頭弄得這些函數(shù)不好分辨,呵呵)。我覺得這個(gè)Idea確實(shí)不錯(cuò),而且本應(yīng)如此,Annotation就是用來干這個(gè)的嘛。不過這個(gè)其實(shí)不能怪JUnit,JUnit出來的時(shí)候Annotations還沒有出現(xiàn)在Java語言中。

      2)解決JUnit中的多實(shí)例化問題。在JUnit中,每一個(gè)測試用例都會(huì)實(shí)例化一份TestCase,同時(shí)也會(huì)在測試執(zhí)行前執(zhí)行setUp,在測試后執(zhí)行tearDown。這會(huì)帶來效率的降低,而有些測試,比如數(shù)據(jù)庫鏈接,也會(huì)帶來一些其它問題。TestNG用XML配置文件來解決這樣的問題。不過,我覺得,簡單才是最美,弄成Ant配置那么復(fù)雜的話,真夠麻煩。

      3)TestNG對多線程測試的支持良好,只需要配置即可。JUnit中要想進(jìn)行多線程測試比較麻煩,需要其它模塊,比較著名的是GroboUtils。

      我覺得很多概念都不錯(cuò),比如Group Testing,不需要派生TestCase等等,測試用例函數(shù)的參數(shù)化等等,不過這些還是站在了巨人(JUnit)的肩膀上。我不喜歡的是XML Configuration的部署策略,太麻煩。TestNG給出的是這樣的應(yīng)用場景,一個(gè)小組開發(fā),寫好所有的測試用例,有的人只需要這幾個(gè),有的人需要那幾個(gè),因?yàn)槿烤幾g測試非?;ㄙM(fèi)時(shí)間,這樣,更改XML Configuration就可以了,確實(shí)如此,不過我實(shí)在不喜歡什么東西都用這種配置文件來弄,簡單的事情變得復(fù)雜,就不好玩兒了。就連Ant之父James Duncan Davidson也覺得Ant現(xiàn)在的腳本太復(fù)雜呢,呵呵。

      從0到1和從1到2是完全不同的,基于測試開發(fā)這個(gè)Idea真的是非常棒,這種Test Driven Development真的極大的改變了軟件開發(fā)的方式。最早的Idea不知道是誰的,我記著從前看Bruce EckelThinking in Java的時(shí)候,就有單元測試的影子。插一句,其實(shí),Java中的Assert Keyword,MFC中的Assert宏,也都有TDD的影子,不過還差很多,但是開發(fā)理念已經(jīng)有幾分相像了。

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多