亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
對Ajax應用程序進行單元測試
作者:網絡轉載 發布時間:[ 2013/1/31 14:20:55 ] 推薦標簽:

您可能從編寫 Ajax 應用程序中獲得了極大樂趣,但是對它們執行單元測試卻著實讓人頭痛。 在本文中,Andrew Glover 著手解決 Ajax 的弱點(其中之一),即應對異步 Web 應用程序執行單元測試的固有挑戰。幸運的是,他發現在 Google Web Toolkit 的幫助下,解決這個特殊的代碼質量問題要比預想的容易。

Ajax 在近期無疑是 Web 開發界時髦的字眼之一 —— 與 Ajax 相關的工具、框架、書籍以及 Web 站點的劇增是該技術流行的好證明。此外,Ajax 應用程序也相當靈巧,不是嗎?不過,像任何一個開發過 Ajax 應用程序的人證實的一樣,對 Ajax 執行測試真的很不方便。事實上,Ajax 的出現已經從根本上使得許多測試框架和工具失效,因為它們并沒有針對異步 Web 應用程序測試進行設計!

有趣的是,某個支持 Ajax 的框架的開發人員注意到了這個限制,并為此做了一些非常新穎的設計:內置的可測試性。除此之外,由于該框架簡化了使用 Java™ 代碼(而不是 JavaScript)創建 Ajax 應用程序,它的起點甚高,并且充分利用了 Java 平臺上無可置疑的標準測試框架:JUnit。

我所論及的框架當然是非常流行的 Google Web Toolkit,也是 GWT。在本文中,我將向您展示 GWT 如何實際地利用 Java 兼容性,使 Ajax 應用程序的每個部分都能像與之對應的同步應用程序一樣進行測試。

 

JUnit 和 GWTTestCase

因為與 GWT 有關的 Ajax 應用程序采用 Java 代碼編寫,所以非常適合開發人員使用 JUnit 進行測試。事實上,GWT 開發小組還為此創建了一個幫助器類 GWTTestCase,擴展自 JUnit 的 3.8.1 TestCase。該基類添加了一些功能,可測試 GWT 代碼并處理某些基礎實現從而啟動并運行 GWT 組件。
 
Google Web Toolkit
Google Web Toolkit 在 Java Web 開發社區的發布聲勢浩大,同時也獲得了與之相稱的巨大轟動。GWT 為利用 Java 代碼進行設計、構建和部署支持 Ajax 的 Web 應用程序提供了一種新穎的方式。Java Web 開發人員不再需要學習 JavaScript 并花費數個小時解決特定于瀏覽器的問題,他們可以直接進行與 Ajax 有關的富含信息的動態 Web 應用程序設計。

需要提醒的是:GWTTestCase 并非用來測試與 UI 相關的代碼 —— 它是為了便于測試那些由 UI 交互觸發 的異步問題。對 GWTTestCase 用途的誤解使許多剛接觸 GWT 的開發人員備受挫折,因為他們期望能夠用它方便地模擬用戶界面,但終發現這是徒勞的。

Ajax 組件有兩個基本組成:體驗和功能,這些都被設計成異步方式。圖 1 演示了一個模擬 Web 表單的簡單 Ajax 組件。由于該組件支持 Ajax,表單的提交是異步執行的(即:無需重新載入與傳統表單提交關聯的頁面)。

圖 1. 一個支持 Ajax 的簡單 Web 表單

輸入一個有效單詞,單擊組件的 Submit 按鈕,將向服務器發送消息請求該單詞的定義。該定義通過回調異步返回,相應地插入到 Web 頁面,如圖 2 所示:


圖 2. 單擊 Submit 按鈕后顯示響應

功能性和集成測試

圖 2 所示的交互測試可用于多個不同場景,但是其中兩種場景為常見。從功能性觀點考慮,您或許希望編寫一個測試:填入表單值,單擊 Submit 按鈕,然后驗證表單是否顯示定義。另外一個選擇是集成測試,使您能夠驗證客戶端代碼的異步功能。GWT 的 GWTTestCase 正是被設計用來執行此類測試。

需要牢記的是:在 GWTTestCase 測試用例環境下不可以進行用戶界面測試。在設計和構建 GWT 應用程序時,您必須清楚不要依賴用戶界面 測試代碼。這種思路需要把交互代碼從業務邏輯中分離出來,正如您已經了解的,這是佳的入門實踐!

舉例而言,重新查看圖 1 和圖 2 所示的 Ajax 應用程序。該應用程序由四個邏輯部分構成:TextBox 用于輸入目標單詞,Button 用于執行單擊,還有兩個 Label(一個用于 TextBox,另一個顯示定義)。實際 GWT 模塊的初始方法如清單 1 所示,但是您該如何測試這段代碼呢?


清單 1. 一個有效的 GWT 應用程序,但是如何測試它?

                public class DefaultModule implements EntryPoint { public void onModuleLoad() {   Button button = new Button("Submit");   TextBox box = new TextBox();   Label output = new Label();   Label label = new Label("Word: ");   HorizontalPanel inputPanel = new HorizontalPanel();   inputPanel.setStyleName("input-panel");   inputPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);   inputPanel.add(label);   inputPanel.add(box);   button.addClickListener(new ClickListener() {    public void onclick(Widget sender) {      String word = box.getText();      WordServiceAsync instance = WordService.Util.getInstance();       try {         instance.getDefinition(word, new AsyncCallback() {                      public void onFailure(Throwable error) {             Window.alert("Error oclearcase/" target="_blank" >ccurred:" + error.toString());           }           public void onSuccess(Object retValue) {             output.setText(retValue.toString());           }    });        }catch(Exception e) {          e.printStackTrace();  } }   });   inputPanel.add(button);   inputPanel.setCellVerticalAlignment(button,     HasVerticalAlignment.ALIGN_BOTTOM);   RootPanel.get("slot1").add(inputPanel);   RootPanel.get("slot2").add(output);   }} 


清單 1 的代碼在運行時發生了嚴重的錯誤:它無法按照 JUnit 和 GWT 的 GWTTestCase 進行測試。事實上,如果我試著為這段代碼編寫測試,從技術方面來說它可以運行,但是無法按照邏輯工作。考慮一下:您如何對這段代碼進行驗證?惟一可用于測試的 public 方法返回的是 void, 那么,您怎么能夠驗證其功能的正確性呢?

如果我想以白盒方式驗證這段代碼,必須分離業務邏輯和特定于用戶界面的代碼,這需要進行重構。這本質上意味著把清單 1 中的代碼分離到一個便于測試的獨立方法中。但是這并非聽上去那么簡單。很明顯組件掛鉤是通過 onModuleLoad() 方法實現,但是如果我想強制其行為,可能 必須操縱某些用戶界面(UI)組件。

軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 日本免费大黄 | 皇色在线 | 国产成人高清精品免费软件 | 欧美怡红院免费的全部视频 | 顶级欧美做受xxx000 | 一个人看的www在线视频播放 | 欧美一级成人免费大片 | 日韩一级在线 | 人人爽天天爽 | 国产亚洲视频在线 | 直接观看黄网站免费视频 | 人人做天天爱夜夜爽中字 | 伦理久久 | 成人高清毛片a | 中文字幕一区二区区免 | 久久天天躁狠狠躁狠狠躁 | 99成人精品| 日日碰狠狠添天天爽 | 激情五月激情综合网 | 在线视频一区二区日韩国产 | 意大利xxxx性hd极品 | 国产v国产v片大片线观看网站 | 色视频免费版高清在线观看 | 亚洲综合久久1区2区3区 | 亚洲第一成年网 | 特级毛片aaaa免费观看 | 亚洲一级片网站 | 中文字幕一区二区三区在线播放 | 一区二区三区精品国产 | 欧美激情人成日本在线视频 | 2019中文字幕在线 | 欧美色综合高清视频在线 | 国产一卡2卡3卡四卡精品网 | 男女视频免费网站 | 无遮挡在线观看 | 国产三级视频在线 | 国产在线一区二区 | 日本大片成人免费网址 | free嫩白的18性中国 | 欧美在线观看视频网站 | 青草成人 |