模組化專案擁有數十個獨立 Java 工程、數百個 JUnit 測試類別,分散於不同目錄。手工執行繁瑣,腳本維護成本高(新增測試須改腳本),亟需一個自動發現並一次執行所有測試的全域測試程式。
JUnit 4 定義 Runner 介面,Suite 繼承 Runner 可執行多個測試類別。自訂 AllJunitTestRunner extends Suite,建構子傳入經過過濾的測試類別集合:
public AllJunitTestRunner(Class<?> clazz, RunnerBuilder builder) throws InitializationError {
super(builder, clazz, loadAllTestClass(filterClassNameList(clazz, loadAllClassesName(clazz))));
}
java.class.path,分割路徑,排除 .jar(可選擇性支援),遞迴掃描目錄收集所有 .class 檔案名稱(轉為完整類別名,如 com.aa.bb.Cc)。com.aa.bb.cc1.*)。Class.forName,捕獲 ClassNotFoundException 跳過。(clazz.getModifiers() & Modifier.ABSTRACT) != 0$ 或 isLocalClass()/isAnonymousClass()junit.framework.TestCase(TestCase.class.isAssignableFrom(clazz))。@Test(method.getAnnotation(Test.class) != null)。通過所有條件者加入 toBeRanTestClassList。
建立空測試類別指定 Runner:
@RunWith(AllJunitTestRunner.class)
public class AllJunitTest { }
執行此類別即自動跑完專案群所有測試。
利用 JUnit 4 Runner 機制、Classpath 掃描與反射識別測試類別,實現零維護成本的全域測試執行。實務上大幅減少手工/腳本負擔,確保新增測試即時生效,提升敏捷開發品質。