国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用Java測試網絡代碼

2019-11-18 10:46:43
字體:
來源:轉載
供稿:網友

  網絡代碼被證實是很難進行完全徹底的測試,這是因為測試組件不依靠其他服務器,以獨立進程形式工作時效果最好。本文中,Nelson Minar描述了兩種單元測試網絡代碼的方法。首先,他提出您設計網絡代碼時應該盡可能地做到邏輯上與網絡獨立。接著,他建議使用java的協議處理器類模擬網絡連接而不是使用實際的網絡。使用這些原則,您就可以很輕松地生成網絡測試軟件。
  測試網絡代碼并是一件很困難的事情。優秀的單元測試組件運行速度非常快,這樣開發人員在每次編譯之后就能夠進行測試。當然,測試流也要能夠穩定地運行,這樣它們才可以持續捕捉代碼中的任何錯誤。然而,實踐證實,網絡代碼(例如,從URL上讀取的代碼)是很難快速并穩定地測試的。而且,假如測試組件本身進行網絡調用,測試會因為依靠網絡和其他服務器將會變得非常緩慢并十分不穩定。
  設想一個可以從網頁上下載、格式化并顯示xml數據的程序。該程序的本地測試流將需要從一個運行的Web服務器上獲取XML數據。但是程序的很多部分——XML解析器、格式化程序和顯示程序——可能不需要依靠網絡就可以獨立測試。請記住這個例子,我將在本文中舉例說明兩種可以測試與網絡相關代碼的方法。當測試進行時,這兩種方法可以避免使用網絡。
  我首先描述簡單的網絡激活演示程序PRintrss,然后再討論如何使用簡單的 Reader 和Writer 對象而不是網絡連接來設計簡化測試的PrintRSS程序。最后我將介紹一個答應程序員合成非凡的testurl庫:使用正常http中的URLs繞過網絡。注重: 測試將使用JUnit 測試框架的 assert() 方法。
  PrintRSS演示程序
  PrintRSS是一個可以從URL讀取數據并對數據進行處理的程序。它可以很好的演示網絡代碼的測試。PrintRSS 使用RSS格式讀取數據,這個數據格式可以簡單地將新鮮內容并入XML。本文中,這個重要的RSS結構定義如下:
  
   Channel Title
   Item 1
   Item 2 ...
  

  PrintRSS從某個URL下載RSS文檔,規定內容的具體布局,然后以一種易讀的方式將標題輸出到System.out:
  Channel Title
   Item 1
   Item 2
  PrintRSS執行四個主要操作:
  ● 打開與某一URL的連接
  ● 使用XML進行讀取
  ● 格式化數據
  ● 輸出到System.out
  PrintRSS程序將上述的四種功能封裝在一個單獨的方法(printURL(URL))中。然而,很難對這個方法進行測試,原因有兩個:
  首先代碼依靠于從URL上讀取的數據;假如URL 是一個http: URL,這就要涉及到網絡。而且,輸出到System.out所產生的影響使代碼自己的行為也被隱藏起來。好好考慮一下這些問題,您又能如何更好地設計Printress來進行測試呢?
  使用eaders和writers封裝數據
  簡單地解析和格式化XML代碼而不是連接網絡,您就能分解代碼并獨立測試數據的邏輯性。雖然再分解代碼看起來有點令人畏懼,但是這樣的努力是為了得到更好的代碼。這是因為代碼是經過測試的同時設計也更標準。
  記住,您可以將printURL()的代碼解析和格式化功能分解為一個新的方法formatReader(Reader, Writer),這個方法專門用于對一個帶有XML數據的Reader對象進行解析然后將結果報告輸出到提供的Writer。
  測試 formatReader(Reader, Writer)現在變得簡單了:
  testFormatReaderGoodData():
   String goodRSSData = "" +
   "Channel Title" +
   "Item 1" +
   "Item 2" +
   "
";
   String goodRSSOutput = "Channel Title/n Item 1/n Item 2/n";
  
   Reader r = new StringReader(goodRSSData);
   Writer w = new StringWriter();
   PrintRSS.formatReader(r, w);
  
   assertEquals(goodRSSOutput, w.toString());
  上面的示例只用readers和writers在沒有URL和網絡連接的情況下測試了解析和格式化邏輯。測試示例演示了一個有用的測試方法:創建的reader流將測試數據包含在測試代碼中而不是從文件或者網絡讀取數據。實踐證實StringReader和StringWriter(或者 ByteArrayInputStream 和ByteArrayOutputStream)在把測試數據嵌入到單元測試流方面是沒有價值的。
  上述的單元測試在一切都正常時執行一定的邏輯進行觀察,但它對問題出現錯誤處理代碼同樣重要。接下來,就是一個測試壞數據的示例,其中巧妙的使用了Junit來檢查是否出現異常:
  testFormatReaderBadData():
   String badXMLData = "this is not valid xml data";
   StringReader r = new StringReader(badXMLData);
  
   try {
   PrintRSS.formatReader(r, new StringWriter());
   fail("should have thrown XML error");
   } catch (XMLParseException ex) {
   // No error, we eXPected an exception
   }
  readers 和 writers再次封裝數據。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜州市| 宣武区| 无棣县| 衡阳市| 紫阳县| 宣城市| 环江| 于田县| 金昌市| 武胜县| 方山县| 喜德县| 米易县| 且末县| 新巴尔虎右旗| 凌源市| 高碑店市| 鹿泉市| 金平| 郸城县| 竹北市| 镶黄旗| 甘德县| 特克斯县| 隆子县| 玉门市| 泰顺县| 北碚区| 晴隆县| 皮山县| 武功县| 琼结县| 合肥市| 唐海县| 孟州市| 岑巩县| 太保市| 麻阳| 佛学| 偃师市| 高密市|