在 Eclipse 內通過 Ant 腳本編譯、運行 JUnit 測試、生成報告,是掌握自動化構建基礎的經典實踐。本文提供最小化可運行項目結構、build.xml 全量配置、Eclipse Ant Runtime 設置與運行驗證步驟。
AntTest/
├─ src/
│ └─ com/test/
│ ├─ ABS.java # 被測類
│ └─ ABSTest.java # JUnit Test Case (繼承 TestCase 或 @Test 註解)
├─ lib/
│ └─ junit.jar # JUnit 4.x/3.x JAR (或由 Ant 路徑引用)
├─ build.xml # Ant 構建腳本
└─ bin/ # 編譯輸出目錄 (自動創建)
Eclipse 內置 Ant 不自帶 JUnit 任務所需類,必須手動添加:
Window → Preferences → Ant → Runtime → Classpath 選中 Ant Home Entries (Default)。ECLIPSE_HOME/plugins/org.junit_/junit.jar (或項目 lib/junit.jar)。原理:<junit> 任務類在 junit.jar 中,Ant Runtime Classpath 必須可見才能加載任務實現。
<?xml version="1.0" encoding="UTF-8"?>
<project name="AntJUnitDemo" default="junit" basedir=".>
<!-- 屬性定義 -->
<property name="run.classpath" value="bin"/> <!-- 編譯輸出 -->
<property name="run.srcpath" value="src"/> <!-- 主源碼 -->
<property name="test.srcpath" value="src"/> <!-- 測試源碼 (同目錄) -->
<property name="test.report" value="report"/> <!-- 報告輸出 -->
<property name="lib.dir" value="lib"/> <!-- 依賴 JAR 目錄 -->
<!-- 編譯類路徑 (lib 下所有 JAR) -->
<path id="compile.path">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- 目標: 編譯主碼與測試碼 -->
<target name="compile">
<javac destdir="${run.classpath}" srcdir="${run.srcpath}" classpathref="compile.path" includeantruntime="false"/>
<javac destdir="${run.classpath}" srcdir="${test.srcpath}" classpathref="compile.path" includeantruntime="false"/>
</target>
<!-- 目標: 運行 JUnit 測試 (依賴 compile) -->
<target name="junit" depends="compile">
<tstamp/> <!-- 生成 DSTAMP/TSTAMP 用於報告目錄命名 -->
<mkdir dir="${test.report}"/>
<mkdir dir="${test.report}/framework-${DSTAMP}-${TSTAMP}"/>
<junit printsummary="yes" haltonfailure="no"> <!-- 打印摘要、失敗不中斷構建 -->
<classpath>
<pathelement path="${run.classpath}"/> <!-- 編譯輸出類 -->
<fileset dir="${lib.dir}"> <!-- 依賴 JAR -->
<include name="**/*.jar"/>
</fileset>
</classpath>
<formatter type="plain" usefile="false"/> <!-- 控制台輸出純文本摘要 -->
<formatter type="xml"/> <!-- 生成 XML 報告供 Jenkins/報告工具解析 -->
<!-- 批量掃描測試類: **/*Test.java -->
<batchtest fork="yes" todir="${test.report}/framework-${DSTAMP}-${TSTAMP}">
<fileset dir="${test.srcpath}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
</target>
</project>
build.xml → Run As → Ant Build。Buildfile: ...\AntTest\build.xml
compile:
[javac] Compiling 2 source files to ...\bin
junit:
[mkdir] Created dir: ...\report\framework-20240515-143022
[junit] Running com.test.ABSTest
[junit] Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 0.12 sec
BUILD SUCCESSFUL
Total time: 2 seconds
report/framework-YYYYMMDD-HHMMSS/ 下生成 TEST-com.test.ABSTest.xml (XML 格式) 及可選純文本文件。<failure>/<error> 詳情。| 元素/屬性 | 作用 | 注意點 |
|---|---|---|
fork="yes" | 獨立 JVM 運行測試 | 隔離類加載器、允許測試調用 System.exit()、加載本地庫 |
batchtest | 批量掃描測試類 | **/*Test.java 命名約定可自定義 |
formatter type="xml" | 生成標準 XML 報告 | CI/CD 集成必備 |
haltonfailure="no" | 測試失敗不中斷構建 | 便於一次看到所有失敗 |
includeantruntime="false" | javac 不包含 Ant 自帶類庫 | 避免版本衝突,構建可復現 |
junit-platform-console-standalone JAR,任務改用 <java> ... --scan-classpath ... 或官方 junitlauncher 任務 (Ant 1.10.7+)。<taskdef> + <jacoco:coverage> 包裹 <junit>。<junit> 不直接支持並行,可拆分多 batchtest 並用 <parallel> 包裹 (需線程安全測試代碼)。build.xml,保存項目自動觸發測試。掌握 Ant + JUnit 基礎流程,是理解 Maven Surefire、Gradle Test、CI Pipeline 內部機制的紮實基石。