JUnit4總體介紹

JUnit4的入口類

JUnitCore作爲JUnit4的入口類(包含了靜態的main方法),定義了一系列方法來啓動JUnit完成對測試類的反射執行

通過類的Class對象作爲參數來對測試類進行反射分析和提取測試邏輯,最終執行測試方法

通過命令行啓動時 : java -cp junit.jar MyTest,執行的就是JUnitCore,參數爲MyTest

 public static void main(String... args) {
        Result result = new JUnitCore().runMain(new RealSystem(), args);
        System.exit(result.wasSuccessful() ? 0 : 1);
    }


關鍵類

Statement

可執行單元,也就是我們的測試方法和測試類,唯一的方法爲evaluate()

子類InvokeMethod作爲其實現,調用FrameworkMethod,直接通過反射執行Method完成測試方法的調用

FrameworkMember

保存反射獲取的成員變量和方法集合

實現類爲FrameworkMethod 和 FrameworkField

還有TestClass做爲Class文件的包裝類,保存了Class對象和反射獲取的字段以及方法,包裝爲FrameworkMember

Description

用來描述一個test(將要執行或者已經被執行(failure))的狀態

提供測試運行的feedback,比如IDE提供的tree view可視界面

Request

表示一個將要執行的test的抽象描述,而不是用測試類本身的屬性,這使得對測試類進行filtering和sorting成爲可能

Runner

定義了測試類的執行邏輯,通過事件監聽器RunNotifier來通知RunListener進行事件監聽

默認實現類爲 BlockJUnit4ClassRunner

RunNotifier

作爲RunListener的監聽器,擁有RunListener集合,負責進行事件通知調用

RunListener

負責對測試的流程中關鍵事件的處理邏輯

RunnerBuilder

作爲Runner的建造器,負責不同Runner實現的實例創建

工具類爲AllDefaultPossibilitiesBuilder,通過判斷在類上的不同註解類型來生成不同的RunnerBuilder實現

比如 @Ignored的IgnoredBuilder (忽略整個類)和用於對JUnit4進行擴展的@Runwith的AnnotatedBuilder

Computer

負責調用RunnerBuilder創建Runner實例

Result

保存測試結果數據,包括測試的開始和結束時間,成功、失敗和忽略的個數統計


JUnit4的編碼風格

1、使用了許多設計模式,比如Listener模式(RunListener + RunNotifier)、Builder模式(RunnerBuilder)、工廠模式、模板方法模式(ParentRunner)、裝飾器模式(Statement)等

2、使用了大量的匿名內部類來完成回調,利用了類似閉包的特性






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章