單元測試基石
| 工具 | 定位 | 核心特性 |
| JUnit | 標準單元測試框架 | 白盒測試、註解驅動、IDE 深度集成 |
| TestNG | 下一代測試框架 | 靈活分組、依賴測試、數據驅動、並行執行、JSR-175 註解 |
| JTestCase | 數據驅動測試 | XML 組織測試數據、聲明式條件與期望結果 |
Web/容器測試
| 工具 | 場景 | 特點 |
| Cactus | Servlet/EJB 容器內測試 | JUnit 擴展、自動部署到容器、測試 HttpServletRequest 等 |
| StrutsTestCase | Struts 應用測試 | Mock 模式(無容器)+ Cactus 模式(真容器)、測試 Action/Mapping/Forward |
| Mockrunner | J2EE 單元測試 | Mock Struts/Servlet/Filter/Tag/JDBC/JMS/EJB,無需容器 |
| JTR | J2EE 集成測試 | IOC 風格、複雜測試套件、連接應用服務器執行、GPL 協議 |
Mock 對象框架
| 工具 | 特色 |
| EasyMock | 動態代理生成 Mock、記錄/回放模式、適合 TDD |
| jMock | DSL 風格定義期望、靈活匹配器、減少脆弱測試 |
| MockCreator | 生成 Mock 源碼文件、可編輯擴展 |
| MockEJB | 輕量級 EJB 容器、無需應用服務器運行 EJB 測試 |
| Surrogate | 基於 AspectJ、大型系統單元測試、與 JUnit/MockEJB 無縫集成 |
數據庫測試
| 工具 | 用途 |
| DbUnit | JUnit 擴展、測試間數據庫狀態重置、數據集導入導出 |
| SQLUnit | 存儲過程回歸測試、Java/JUnit/XML 開發 |
| DBMonster | 隨機數據生成、數據庫壓力測試 |
GUI 測試
| 工具 | 技術棧 | 特點 |
| Abbot | Swing/AWT | XML 腳本或 Java 代碼驅動 GUI 測試 |
| JFCUnit | Swing | 窗口句柄獲取、組件層次定位、事件模擬、線程安全 |
| Marathon | Swing | Recorder/Runner/Editor、Python 腳本、面向最終用戶驗收測試 |
性能/負載測試
| 工具 | 協議 | 授權 |
| The Grinder | HTTP/TCP/自定義 | BSD 開源、Python 腳本、分布式注入 |
專項測試
| 工具 | 領域 |
| XMLUnit | XML 比較、XPath 驗證、XSLT 轉換、Schema 校驗(Java/.NET) |
| Jameleon | 自動化測試平台、插件架構、Swing 插件、GUI 管理 |
| J2MEUnit | J2ME 單元測試、基於 JUnit |
| Jetif | 回歸/功能測試框架、受 JUnit/JTestCase/TestNG 啟發、易遷移 |
| GroboUtils | 多線程測試、層次化測試、代碼覆蓋率 |
| TESTARE | 分布式應用測試(Servlet/JMS/CORBA/RMI) |
選型建議
- 新項目首選:JUnit 5 + Mockito(Mock 界標準)+ AssertJ(斷言)
- 複雜業務/數據驅動:TestNG + DbUnit
- Legacy J2EE/Struts:Cactus + Mockrunner + StrutsTestCase
- Swing 桌面應用:Abbot + JFCUnit 或 Marathon(驗收測試)
- 性能基線:The Grinder 或 JMeter(更流行)
- XML 密集型:XMLUnit
總結
Java 測試生態極其豐富,覆蓋單元、集成、Web、GUI、性能、專項等全維度。沒有銀彈,只有合適的組合。建議:確立「測試金字塔」策略(大量單元、適量集成、少量 UI/端到端),選擇團隊熟悉、生態活躍、CI/CD 友好的工具鏈,並持續重構測試代碼保持可維護性。