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

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
AOP@Work: 對方面進行單元測試
作者:網絡轉載 發布時間:[ 2013/3/12 17:03:58 ] 推薦標簽:

簡介:AOP 使編寫特定于應用程序的橫切關注點測試比任何時候都要容易了 。 要了解其原因以及如何實現,請聽 Nicholas Lesiecki 介紹測試面向方面的代 碼 所具有的好處,并展示在 AspectJ 中測試橫切行為的樣式。

在過去五年中廣泛采用的程序員測試是由顯著的生產率和得到的代碼質量所 驅 動的。不過,在面向方面編程(AOP)出現之前,為橫切行為(如安全、事務管 理 或者持久性)編寫測試很困難。為什么呢?因為這些行為沒有很好地模塊化。如 果沒有可測試的單元,那么很難編寫出單元測試。隨著 AOP 的普及,編寫與 橫 切關注點在目標系統中的實現無關的、對其進行檢查的測試已變得可行并且值得 去做。

在本文中,我將介紹測試用方面實現的橫切行為的一組技術。重點放在方面 的 單元測試,但是我也展示了有助于建立對面向方面應用程序的信任度的其他模式 。很快您會看到,測試方面涉及許多與測試對象相同的技巧和概念,并且有許 多相同的做法和設計好處。

本文的撰寫基于我在 AspectJ 中的經驗。許多概念應當可以移植到其他 AOP 實現中,但是有些概念是特定于語言的。請參閱 下載 以下載本文源代碼,請參 閱 參考資料 以下載完成例子所需要的 Aspectj 和 AJDT。

面向方面代碼的單元測試

應用程序的好的自動測試集應當像圖 1 那樣:以隔離的、對各個類的測試構 成一個廣泛的基礎,使測試覆蓋面廣,并能迅速分離出錯誤。在這之上是集成的 、端到端的系統測試,它驗證各單元是否可以協調工作。如果這些層是良構的并 且頻繁運行,那么它們結合在一起可以增加對于應用程序行為的信任度。

在金字塔底部的單元測試很重要,這有幾個理由。首先,它們幫助您產生那 些 在集成測試中難于再現或者需要繁瑣步驟才能再現的關注點用例。其次,由于它 們涉及的代碼更少,因此它們運行起來通常更快(因此可以更經常地運行它們) 。第三,它們可以幫助您思考每個單元的接口和要求。好的單元測試要求單元間 的松散耦合,這是在測試條件下讓測試得以運行的條件。

圖 1. 分層的測試

但是橫切行為會怎么樣呢?想像一位客戶的要求:“在執行對 ATM 類的任何 操作之前要檢查調用者的安全憑證。”當然可以(并且應該)針對這項要求編寫 集成測試。不過,非面向對象的開發環境使得編寫“在操作之前檢查安全性”這 種行為的單元測試很難將這種行為分離出來。這是因為行為混入到了目標系統中 ,讓人很難把握或者用工具分析。但是如果用方面開發,那么可以將這些行為 表示為建議(advice),應用到所有匹配某個切點(pointcut)的操作。現在行 為可以很好地用單元表示,可以在隔離的情況下測試或者在 IDE 顯示它。

面向方面的代碼在哪里出現問題了

在討論對方面進行單元測試的技術之前,我要簡單討論錯誤類型。橫切行為 分 為兩個主要部分:行為做什么(我稱之為橫切功能)和行為用在什么地方(我稱 之為橫切規范)。回到 ATM 的例子,橫切功能檢查調用者的安全憑證。橫切規 范 檢查 ATM 類中每一個公共方法。

為了實現的真正信任度,需要同時檢查功能和規范(或者不嚴格地說,建議 和 切點)。在完成這個例子的過程中,我將強調給定的測試模式是驗證橫切功能、 規范,還是兩者同時驗證。

注意我將重點放在測試切點、建議和支持它們的代碼上。類型間聲明(和其 他 方面功能)當然是可測試的。我在本文中展示的一些技巧稍加修改可以對它們 使用。它們還有自己的一組技巧,其中許多是很直觀的。不過為了節省篇幅,我 決定不在本文中明確地討論它們。

測試模式編目

我將本文寫成測試面向方面代碼的模式的編目。對于每種模式,我描述了它 針 對哪種類型的錯誤,對該模式進行總結,提供一個例子并討論該模式的優缺點。 編目分為四節:

測試完整的單元 :此節展示了測試完整的系統部分(換句話說,同時測試方 面和非方面類)的模式。這種技術是在沒有使用方面時獲得橫切行為信任度的惟 一方法,并在使用方面時仍然是一種重要的工具。

使用可視化工具 :這里描述的兩種模式利用了 AspectJ IDE 對 Eclipse 的 支持,也稱為 AJDT。嚴格地講,使用可視化工具檢查應用程序的橫切結構不是 一 種測試技術。不過,它可幫助您理解并獲得對應用程序的橫切關注點的信任。

使用委派 :此節展示可以幫助將前面提到的兩類錯誤分開的兩種模式。通過 將一些邏輯從建議中分離到 helper 類中(或者方法中),可以編寫與橫切規范 無關的、檢查應用程序橫切行為的測試。

使用 mock 目標 :后一節包括三種模式,它們使用模擬真實建議目標的 “mock 目標”類,可以在不將方面集成到真正目標的條件下測試聯結點匹配和 建 議行為。

Highlighter 方面

為了展示這個編目中的樣式,我使用了一個實現突出顯示搜索術語(即在搜 索 結果中突出顯示用戶的查詢術語)的方面。我實現了與在上一例子中展示的方面 非常相像的一個方面。該系統要在結果匯總頁、細節頁和應用程序的其他一些地 方中突出顯示術語。我在本文中展示的這個例子只橫切一個類,但是原理是一樣 的。清單 1 包含 Highlighter 方面的一個實現:

清單 1. Highlighter 定義了突出顯示行為

public aspect Highlighter{
 /* ITDs to manage highlighted words */
 private Collection Highlightable.highlightedWords;

 public Collection Highlightable.getHighlightedWords() {
   return highlightedWords;
 }
 public void Highlightable.setHighlightedWords(Collection
   highlightedWords){
  this.highlightedWords = highlightedWords;
 }

 public pointcut highlightedTextProperties() :
   (
   execution(public String getProduct())
  || execution(public String getTitle())
  || execution(public String getSummary())
  );

 String around(Highlightable highlightable) :
   highlightedTextProperties() && this(highlightable)
 {
   String highlighted = proceed(highlightable);
  for (String word : highlightable.getHighlightedWords()) {
   Pattern pattern = patternForWord(word);
   Matcher matcher = pattern.matcher (highlighted);
   highlighted = matcher.replaceAll("      "bold">$0");
  }
     return highlighted;
 }

private Pattern patternForWord (String word) {
 return Pattern.compile("\b\Q" + word + "\E\b",
  Pattern.CASE_INSENSITIVE);
} 
}

上一頁12345下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 欧美性群另类大交人妖 | 九九精品在线播放 | 国产婷婷综合丁香亚洲欧洲 | 欧美激情伊人 | 中文字幕日韩在线 | 天天射天天干天天 | 午夜免费r级伦理片 | 精品国产免费一区二区 | 国产看片视频 | 亚洲国产日韩欧美在线 | 真人一级一级特黄高清毛片 | 欧美日韩亚洲国内综合网俺 | 最新国产午夜精品视频不卡 | 亚洲不卡在线观看 | 天天爱天天操天天射 | 91视频链接 | 黄色福利片 | 一个人看的www片免费中文 | 天天色天天碰 | 日韩 欧美 中文 | 国产无人区卡一卡二卡三网站 | 另类在线 | 久久精品视频3 | 日本欧美久久久久免费播放网 | 欧美日韩在线免费 | 18女人毛片水真多免费 | h在线观看视频 | 亚洲日本黄色片 | 男人和女人日皮视频 | 久草热视频在线观看 | 日韩精品福利在线 | 国产一区2区 | 成年女人毛片免费视频 | 精品视频vs精品视频 | www狠狠干| 欧美高清精品 | 日韩一级欧美一级在线观看 | 中文字幕在线免费观看 | 日韩免费在线播放 | 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 | 国产精品激情丝袜美女 |