資源描述:
《追求代碼質(zhì)量(14)-對ajax應(yīng)用程序進(jìn)行單元測試-java開發(fā)java經(jīng)驗技巧》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、追求代碼質(zhì)量(14):對Ajax應(yīng)用程序進(jìn)行單元測試-編程開發(fā)技術(shù)追求代碼質(zhì)量(14):對Ajax應(yīng)用程序進(jìn)行單元測試原文出處:IBM中國A/kv?在近期無疑是Web開發(fā)界最時髦的字眼之一——與Ajax相關(guān)的工具、框架、書籍以及Web站點的劇增就是該技術(shù)流行的最好證明。此外,Ajax應(yīng)用程序也相當(dāng)靈巧,不是嗎?不過,像任何一個開發(fā)過Ajax應(yīng)用程序的人證實的一樣,對Ajax執(zhí)行測試真的很不方便。事實上,Ajax的岀現(xiàn)已經(jīng)從根本上使得許多測試框架和工具關(guān)袞,因為它們并沒有針對異步Web應(yīng)用程序測試進(jìn)行設(shè)計!有趣的是,某個支持Ajax的框架的開發(fā)人員注意到
2、了這個限制,并為此做了一些非常新穎的設(shè)計:內(nèi)置的可測試性。除此之外,由于該框架簡化了使用Java?代碼(而不是JavaScript)創(chuàng)建Ajax應(yīng)用程序,它的起點甚高,并且充分利用了Java平臺上無可置疑的標(biāo)準(zhǔn)測試框架:JUnito我所論及的框架當(dāng)然是非常流行的GoogleWebToolkit,也就是GWT。在本文中,我將向您展示GWT如何實際地利用Java兼容性,使Ajax應(yīng)用程序的毎個部分都能像與之對應(yīng)的同步應(yīng)用程序-樣進(jìn)行測試。JUnit和GWTTestCase因為與GWT有關(guān)的Ajax應(yīng)用程序采用Java代碼編寫,所以非常適合開發(fā)人員使用JUn
3、it進(jìn)行測試。事實上,GWT開發(fā)小組還為此創(chuàng)建了一個幫助器類?GWTTestCase,擴(kuò)展自JUnit的3.8.l?TestCaseo該基類添加了一些功能,可測試GWT代碼并處理某些基礎(chǔ)實現(xiàn)從而啟動并運行GWT組件。需要提醒的是:GWTTestCase?并非用來測試與UI相關(guān)的代碼一一它是為了便于測試那些由U1交互磁發(fā)?的異步問題。對?GWTTestCase?用途的誤解使許多剛接觸GWT的開發(fā)人員備受挫折,因為他們期望能夠用它方便地模擬用戶界面,但最終發(fā)現(xiàn)這是徒勞的。Ajax組件有兩個基本組成:體驗和功能,這些都被設(shè)計成異步方式。圖1演示了一個模擬We
4、b表單的簡單Ajax組件。由于該組件支持Ajax,表單的提交是異步執(zhí)行的(即:無需重新載入與傳統(tǒng)表單捉交關(guān)聯(lián)的頁而)。圖1.—個支持Ajax的簡單Web表單DictionaryServiceWord:IISubmit輸入一個有效單詞,單擊組件的?Submit?按鈕,將向服務(wù)器發(fā)送消息請求該單詞的定義。該定義通過回調(diào)異步返回,相應(yīng)地插入到Web頁面,如圖2所示:圖2.單擊Submit按鈕后顯示響應(yīng)DictionaryServiceWord:JpugnaciousSubmitinclinedtoquarrelorfightreadily,quarrelso
5、me,belligerent;combative.功能性和集成測試圖2所示的交互測試可用于多個不同場景,但是其屮兩種場景最為常見。從功能性觀點考慮,您或許希望編寫一個測試:填入表單值,單擊Submit?按鈕,然后驗證表單是否顯示定義。另外一個選擇是集成測試,使您能夠驗證客戶端代碼的異步功能。GWT的?GWTTestCase?正是被設(shè)計用來執(zhí)行此類測試。需要牢記的是:在?GWTTcStCasc?測試用例環(huán)境下不可以進(jìn)行用戶界面測試。在設(shè)計和構(gòu)建GWT應(yīng)用程序時,您必須清楚不妥加孩兩戶繆而測試代碼。這種思路需要把交互代碼從業(yè)務(wù)邏輯中分離出來,正如您已經(jīng)了解
6、的,這是最佳的入門實踐!舉例而言,重新查看圖1和圖2所示的Ajax應(yīng)用程序。該應(yīng)用程序由四個邏輯部分構(gòu)成:TextBox?用于輸入目標(biāo)單詞,Button?用于執(zhí)行單擊,述有兩個?Label(一個用于?TextBox,另一個顯示定義)。實際GWT模塊的初始方法如清單1所示,但是您該如何測試這段代碼呢?清單1.一個有效的GWT應(yīng)用程序,但是如何測試它?publicclassDefaultModuleimplementsEntryPoint{publicvoidonModuleLoad(){Buttonbutton=newButton("Submit");T
7、extBoxbox二newTextBox();Labeloutput二newLabel();Labellabel=newLabel("Word:〃);HorizontalPanelinputPanel=newHorizontalPanel();inputPanel.setStyleName(/zinput-panel〃);inputPanel.sctVcrticalAlignmcnt(IlasVcrticalAlignmcnt.ALIGN_MIDDLE);inputPanel.add(label);inputPanel.add(box);button.
8、addClickListener(newClickListener(){publicvoido