JUnit源碼分析(二)

來源:互聯網
上載者:User

    在上面我們已經提到了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的整體架構有了全面的認識。總體來說各個包分工明確,設計上採用了必要的設計模式來增強了擴充性和重用性,很值得學習和借鑒。

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。