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、使用了大量的匿名內部類來完成回調,利用了類似閉包的特性