JSF自動(dòng)測試框架特性和性能檢測
因為在容器以外測試JSF組件有所限制,所以大家一直認為對于JSF應用進(jìn)行單元測試是困難的。多數web層的測試框架遵循黑盒測試方式,開(kāi)發(fā)者用web組件編寫(xiě)測試類(lèi)來(lái)驗證渲染的HTML輸出是否符合預期。HtmlUnit,HttpUnit,Canoo WebTest和Selenium等框架都屬于這個(gè)類(lèi)型。這些框架的局限在于它們僅僅只能測試web應用的客戶(hù)端。但是這種現象已經(jīng)隨著(zhù)近來(lái)發(fā)布的JSFUnit和其它一些JSF測試框架,如Shale Test和JSF Extensions而改變了。這些測試框架支持對web應用的客戶(hù)端和端組件的白盒測試。并且,一些項目,如Eclipse Web Tools Platform (WTP)和 JXInsight 已開(kāi)始協(xié)助JSF應用的開(kāi)發(fā)和測試了。
與其它的單元測試框架一樣,一個(gè)典型的JSF測試框架需要具備以下特性:
1、可在容器之外獨立的運行一個(gè)測試用例,可從一個(gè)類(lèi)似Eclipse 或NetBeans的IDE里面運行測試用例,以促進(jìn)測試驅動(dòng)開(kāi)發(fā)(TDD)。
2、可測試完整的HTTP請求-響應生命周期。
3、與構建工具如Ant或Maven集成 ,從而在一個(gè)自動(dòng)構建和持續集成的環(huán)境下運行單元測試。
4、測試框架還需支持JSF的特定需求,如:
在測試方法中調用JSF API,而不是檢查HTML輸出或客戶(hù)端DOM對象。
通過(guò)驗證用戶(hù)在表單上的輸入和訪(fǎng)問(wèn)正確的頁(yè)面視圖來(lái)導航測試。
驗證action是否按預期執行,以及錯誤情況是否顯示預期的錯誤消息。
即使rendered屬性被設置為假(組件不在web瀏覽器上渲染但仍在端保存狀態(tài))時(shí)依然可以驗證JSF組件。
驗證XML配置文件(faces-config.xml 等)是否被正確加載。
測試框架
JSFUnit構建在HttpUnit和Apache Cactus之上,允許JSF應用和JSF AJAX組件的綜合測試和調試。它可以在同一個(gè)測試類(lèi)里測試JSF產(chǎn)品的客戶(hù)端和服務(wù)器端。有了JSFUnit API,測試類(lèi)方法可以提交表單數據,并且驗證管理的bean是否被正確更新。
JSFUnit包括一個(gè)JSF靜態(tài)分析測試套件用來(lái)驗證JSF配置文件,以確保在運行時(shí)產(chǎn)生問(wèn)題之前就能識別出任何與配置相關(guān)的問(wèn)題。它還提供了JSFTimer組件來(lái)執行JSF生命周期的性能分析。它可被應用于跟蹤JSF生命周期的每個(gè)階段對于一個(gè)指定的web請求的響應時(shí)間,并斷言該響應時(shí)間在SLA限定之內。
JSFUnit支持RichFaces 和Ajax4jsf 組件。此框架的Beta 1版本在上月發(fā)布,第二Beta版本計劃在下個(gè)月末發(fā)布。
Shale 測試框架作為一個(gè)Apache項目,提供了對Servlet和JSF組件的mock對象實(shí)現。這些基礎的測試類(lèi)可應用于測試Shale框架類(lèi)以及構建于該框架之上的JSF應用組件。Shale測試可用于編寫(xiě)獨立的單元測試來(lái)運行ViewController 接口暴露的方法。因為為一個(gè)ViewController 組件搭建運行環(huán)境很復雜,所以Shale測試是很有用的。以下是Shale測試框架的主要類(lèi):
AbstractJsfTestCase:這是對web應用的Servlet和JSF組件進(jìn)行單元測試的基礎測試類(lèi)
AbstractViewControllerTestCase: 這個(gè)類(lèi)作為AbstractJsfTestCase的擴展,提供了對使用Viewcontroller實(shí)現類(lèi)的常用場(chǎng)景進(jìn)行測試所需的有效方法。
還有其它JSF web組件的mock實(shí)現,叫做為MockApplication,MockExternalContext和MockFacesContext。
Shale測試還與Spring框架進(jìn)行了集成,允許JSF組件被綁定為管理bean或Spring bean。
JSF Extensions項目是一個(gè)無(wú)UI組件的集合,它擴展了基于JSF 1.2的web應用的功能。它使用JUnit,HTMLUnit和Cactus進(jìn)行自動(dòng)測試?蚣艿腡est-Time模塊為JSF 1.2提供mock對象。Design-Time模塊具有JSF熱部署功能,能停止和重啟應用而無(wú)需經(jīng)歷構建和重部署周期。這個(gè)基于JSF PhaseListener接口的特性會(huì )使得所有的配置文件和類(lèi)被重載。這些使得開(kāi)發(fā)者能在編寫(xiě)JSF應用時(shí)遵循一種測試驅動(dòng)迭代JSF開(kāi)發(fā)方式。
工具
還有一些開(kāi)發(fā)工具也輔助JSF應用的開(kāi)發(fā)和性能檢測。JInspired 組的JXInsight提供了JSF跟蹤和性能檢測特性,該特性基于PhaseListener接口。在JSF應用中使用這個(gè)跟蹤監聽(tīng)器,開(kāi)發(fā)者和web管理員可以對于一個(gè)JSF請求收集到例如跟蹤棧、java調用棧和運行時(shí)UIComponent的層次關(guān)系等信息。
Eclipse WTP 項目里的JSF工具的子項目還提供了支持開(kāi)發(fā)和部署基于JSF的web應用的工具,如Visual JSF Page Editor和Faces Config Editor。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/