淺析對(duì)JSF項(xiàng)目的單元測(cè)試
不知道大家有沒有對(duì)Web頁面進(jìn)行測(cè)試的經(jīng)歷?或者正想要對(duì)web頁面進(jìn)行測(cè)試?為什么我下面這篇文章沒什么人回復(fù)呢?是因?yàn)镴SF用到的人少,還是因?yàn)槲冶容^超前沒幾個(gè)人想到對(duì)JSF頁面進(jìn)行自動(dòng)測(cè)試呢?呵呵
一直以來,我們使用java語言開發(fā)的程序主要是web應(yīng)用程序而非桌面應(yīng)用,當(dāng)然java是完全可以用來開發(fā)桌面應(yīng)用程序的,目前已經(jīng)有了比較成熟的針對(duì)java的單元測(cè)試工具Junit,但是Junit在web應(yīng)用開發(fā)過程中卻很難派上大的用場,比如如何讓程序?qū)SP頁面進(jìn)行自動(dòng)測(cè)試?
我們?cè)谔F路項(xiàng)目中普遍采用了JSF框架進(jìn)行前端頁面的展現(xiàn)和服務(wù)器端業(yè)務(wù)邏輯的處理,收到了比較好的效果,提高了工作效率,但是我們?cè)诔绦蜷_發(fā)過程中經(jīng)常重復(fù)出現(xiàn)一些解決過的錯(cuò)誤,為了解決這些錯(cuò)誤又需要重新尋找出現(xiàn)錯(cuò)誤的地方,或者因?yàn)楦膭?dòng)了一個(gè)小的地方而導(dǎo)致其他地方出現(xiàn)問題我們卻一無所知。
最后我們只能通過一遍遍的點(diǎn)擊頁面重復(fù)測(cè)試才能重新樹立對(duì)程序的信心,然而人是有厭倦心理的,對(duì)于一遍遍重復(fù)的低級(jí)勞動(dòng)很快就會(huì)厭倦,尤其是程序員對(duì)自己所寫的代碼很厭倦測(cè)試,這樣很難保證程序的質(zhì)量。
于是我們想過引入單元測(cè)試,重復(fù)的東西讓計(jì)算機(jī)去做,然而對(duì)JSF頁面進(jìn)行單元測(cè)試是比較困難的,因?yàn)镴SF 程序都是運(yùn)行在容器環(huán)境中的,與HTTP請(qǐng)求和相應(yīng)是緊密關(guān)聯(lián),如果我們要對(duì)ManagedBean進(jìn)行測(cè)試,需要構(gòu)造上下文環(huán)境,這些上下文環(huán)境原本是由瀏覽器和JBoss之類的容器構(gòu)造的,讓我們自己去編寫代碼構(gòu)造上下文環(huán)境很難也很不現(xiàn)實(shí),對(duì)JSF頁面的自動(dòng)測(cè)試也是很難想象的,然而有了 JSFUnit的參與這一切將變得很簡單,JSFUnit就是我下面要介紹的針對(duì)JSF的測(cè)試工具。
JSFUnit是jboss開源組織的一個(gè)開源項(xiàng)目,JSFUnit beta 1版于2007年11月發(fā)布,目前國內(nèi)使用JSFUnit還比較少,相信日后一定會(huì)得到廣泛的使用。JSFUnit被設(shè)計(jì)為通過使用簡單的API來完成 JSF項(xiàng)目的集成測(cè)試和單元測(cè)試的工具。它完全可以訪問managed beans, FacesContext, EL表達(dá)式和JSF內(nèi)部組件樹,同時(shí)可以訪問每次客戶端請(qǐng)求后的HTML相應(yīng)。
當(dāng)然JSFUnit還有其他一些功能,比如JSF靜態(tài)分析測(cè)試可以測(cè)試JSF的配置文件faces-config.xml,幫你盡早發(fā)現(xiàn)配置問題。 JSFTimer能夠進(jìn)行JSF生命周期每個(gè)階段的性能測(cè)試。從此JSF的測(cè)試從難以想象到輕松變?yōu)楝F(xiàn)實(shí)。目前還只有JSFUnit的官方網(wǎng)站對(duì)它的使用方法進(jìn)行了比較詳細(xì)的介紹,如有興趣可以登陸www.jsfunit.org或者h(yuǎn)ttp://www.jboss.com/jsfunit/進(jìn)行查詢。下面我將介紹一下我在使用JSFUnit中的一些經(jīng)驗(yàn),希望需要使用它的人能夠少走彎路。
【編輯推薦】