傳統困境:容器外難測 JSF 組件
多數 Web 測試框架 (HtmlUnit, HttpUnit, Canoo WebTest, Selenium) 採黑盒模式,僅驗證渲染 HTML,無法測試伺服端組件狀態。JSF 運行於容器中,與 HTTP 緊耦合,單元測試長期被認為困難。
破局者:新一代白盒測試框架
JSFUnit (JBoss, Beta 1 2007.11)
- 基於 HttpUnit + Cactus,支持 JSF 及 Ajax 組件綜合測試。
- 同一測試類測試客戶端與伺服端,提交表單並驗證 Managed Bean 更新。
- 靜態分析測試
faces-config.xml,運行前發現配置問題。
- JSFTimer 進行生命周期各階段性能分析,斷言響應時間符合 SLA。
- 支持 RichFaces、Ajax4jsf。Beta 2 即將發布。
Shale Test Framework (Apache)
- 提供 Servlet/JSF 組件 Mock 對象 (
MockApplication, MockExternalContext, MockFacesContext)。
- 基礎測試類
AbstractJsfTestCase、AbstractViewControllerTestCase 簡化 ViewController 測試環境搭建。
- 整合 Spring,JSF 組件可綁定為 Spring Bean。
JSF Extensions (無 UI 組件集合)
- 基於 JSF 1.2 擴展功能,用 JUnit/HtmlUnit/Cactus 自動測試。
- Test-Time 模塊提供 Mock 對象。
- Design-Time 模塊:熱部署 (停止/重啟應用無需構建重部署),基於 PhaseListener 重載配置與類,支持測試驅動迭代開發。
測試框架必備特性清單
- 容器外獨立運行,IDE 內運行 (TDD)。
- 完整 HTTP 請求-響應生命周期測試。
- Ant/Maven 集成 (CI 環境)。
- JSF 專屬:調用 JSF API 而非檢查 HTML/DOM;導航測試 (驗證輸入、視圖);Action/錯誤消息驗證;
rendered=false 組件驗證;XML 配置文件加載驗證。
輔助開發與性能工具
- JXInsight (JInspired):基於 PhaseListener 的 JSF 追蹤與性能檢測,收集追蹤棧、Java 調用棧、UIComponent 層次。
- Eclipse WTP JSF Tools:Visual JSF Page Editor、Faces Config Editor,支持開發部署。
選型建議
- 全棧集成測試 + Ajax 組件 → JSFUnit。
- 單元測試 ViewController/邏輯、大量 Mock 需求 → Shale Test。
- TDD 迭代開發、熱部署需求 → JSF Extensions。
- 性能分析、生產環境診斷 → JXInsight。