• <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源碼分析(二)

    發布: 2007-7-01 18:47 | 作者: admin | 來源: | 查看: 21次 | 進入軟件測試論壇討論

    領測軟件測試網
        在上面我們已經提到了junit.extentions包中的內容TestSetup。來看看整個包的結構吧。











    先簡要的介紹下包中各個類的功能。ActiveTestSuite對TestSuite進行了改進,使得每個test運行在一個單獨的線程里面,并且只到所有的線程都結束了才會結束整個測試。ExceptionTestCase是對TestCase進行的改進,可以方便的判斷測試類是否拋出了期望的異常。而剩下的三個類,大概你看的出來是使用了裝飾模式來設計的。其中TestDecorator為具體裝飾類制定好了使用規則,RepeatedTest和TestSetup則是具體實現的裝飾類。



    那為什么extentions包中ActiveTestSuite和ExceptionTestCase沒有使用裝飾模式呢?原因在于裝飾模式在結構上要求存在類似于組合模式的遞歸。而對于已有的TestCase和TestSuite來說,直接繼承它們要比構建一個新的遞歸結構要來得快得多而且簡單;并且這些增強功能都只是針對TestCase或者TestSuite。使用了裝飾模式來擴展的類與以上不同的是,它們功能的增強是針對任何Test實現的。如果不采用裝飾模式同樣的功能要為TestCase、TestSuite以及以后的其他Test實現分別寫出子類。因此使用裝飾模式能夠很巧妙的解決這個問題。




     


    下面來介紹下junit.runner包。上面已經提到,對于JUnit使用者來說,它可說是完全透明的,這個包里面提供了JUnit自己的測試類加載。下面就是包中所有類的關系圖。









    沒有什么好講的,都是使用反射機制來將測試類加載進來,還有讀取properties文件的操作。如果想學習下反射機制的應用可以閱讀這部分的源碼。




     


    剩下的三個包這里也不作介紹,大部分的內容都是GUI的繪制(當然junit.textui包除外)。




     


    JUnit中還使用了觀察者模式來完成單元測試結果的自動更新(詳細內容請見我關于觀察者模式的文章)。


           這樣,對JUnit的整體框架有了全面的認識?傮w來說各個包分工明確,設計上采用了必要的設計模式來增強了擴展性和重用性,很值得學習和借鑒。

    延伸閱讀

    文章來源于領測軟件測試網 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>