天天看點

Junit源碼分析-設計模式

Junit的底層代碼主要是由觀察者模式,組合模式,模闆模式,指令模式 來實作的。

在Junit裡首先會初始化一個主題對象testResult對象,這個對象裡面有增加監聽器的方法,所有的監聽器方法都實作了

testListener接口,這個接口會把一系統測試過程的資訊傳遞給所有的監聽器,然後監聽器會按照它們的方式顯示給用

戶,在這裡就用到了觀察者模式 ,觀察者模式就是定義對象間的一種一對多的依賴關系,解決多個對象間互相依賴關系的相

互通知。我們是讓多個觀察者對象同時監聽某一個主題對象。testResult就是一個被觀察者,testListener就是一個觀察者接口,隻要testResult發生了變化,那麼所有實作testListener接口的監聽器全都會得到響應并作出相應的變化。我們增加一個監聽器也是非常的簡單,直接實作testListener接口就行了,擴充性非常的強。

然後通過Test接口多态生成一個testSuite對象,在這裡它用到了組合模式 ,組合模式就是将對象以樹形結構組織起來,以達到“部分與整體”的層次結構,使客戶使用單個對象群組合對象的具有一緻性。TestSuite相當于樹形結構的樹枝,而所有測試類的父類TestCase就相當于樹葉。當我們執行TestSuite裡的run方法的時候,它會周遊這個集合,調用每個TestCase對象裡的run方法對所有的測試類進行測試。

在Junit裡,TestCase在執行測試之前和測試之後都要進行一些處理。如我們在測試之前要調用setUp進行一些初始化,比如說資料庫連接配接等。在測試完以後要調用teardown方法進行一些清理工作,如釋放資料庫連接配接等。Junit它在這裡用到模闆模式 ,模闆模式就是父類定義流程,子類定義實作。Junit它就提供setUp和teardown方法,在每次測試之前和之後調用。這樣我們測試就省去了不少的重複代碼。最後就是運作Junit。它在這裡用到指令模式 ,指令模式就是把一個對象的行為封裝成了一個對象,這樣我們就不用去關心實作這個行為的具體細節了。在Junit源碼中,運作Junit直接執行Test接口的run方法就可以了,我們不用去關心它内部是怎麼實作的了。

看完之後,還請各位前輩們為小弟指點指點!!!

繼續閱讀