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

優(yōu)缺點

使用 AJDT 的 cross-references 視圖檢查橫切規(guī)范有三個主要的好處。首 先 ,cross-references 視圖可以在開發(fā)方面時馬上給出反饋。其次,它使您可以 容 易地發(fā)現(xiàn)難于測試的結果。(要編寫驗證 getWebsite() 沒有 突出顯示的測試 , 需要猜出 getWebsite() 可能會出錯,或者檢查 SearchResult 中每一個 String getter。越不容易出的錯誤,越難很好地測試。)第三,自動生成的視圖可以 驗證正確情況,在代碼中驗證它們是很麻煩的。例如,如果搜索 highlighter 需 要影響 20 個聯(lián)結點,那么檢查 cross-references 視圖比為每一個聯(lián)結點編寫 測試更容易。

使用視圖驗證的主要缺點是不能自動檢查。它需要程序員的自律。匆忙的程 序 員可能看過圖 2,卻沒有發(fā)現(xiàn)問題。(下一個模式展示了對這個問題的部分解決 方案。)另一個問題是橫切視圖只顯示了基于靜態(tài)聯(lián)結點 shadow 的匹配。換句 話說,如果有依賴于運行時檢查的切點,如 cflow() 或者 if(),那么 cross- references 視圖不能肯定地說聯(lián)結點會在運行時匹配,只能說看來如此。

模式 2. 檢查隨橫切比較工具改變

針對 :橫切規(guī)范

概述 :利用 AJDT 的橫切比較功能在重構之前或者其他代碼改變前保存項目 的橫切圖。在完成改變后保存另一個圖。(還可以每晚保存一個圖以便比較。) 在橫切比較工具中比較這些圖,以發(fā)現(xiàn)受方面影響的聯(lián)結點所出現(xiàn)的不希望的改 變。注意在撰寫本文時,只有 AJDT 提供橫切比較工具。

例子:改寫一個切點

假定要改正上一個例子中表現(xiàn)出的問題,決定修改切點以使用 Java 5 注釋 , 如下所示:

public pointcut highlightedTextProperties() :
    execution (@Highlighted public String Highlightable+.*())

然后在源代碼中適當位置上添加注釋,例如:

@Highlighted
 public String getTitle() {
  return title;
 }

下一步是比較在改變前后所抓取的項目快照,并得到如圖 3 所示的結果。如 您所見,重構消除了 getWebsite() 的建議匹配,但是也消除了 getSummary() 的匹配。(它看上去像沒有添加上注釋。)

圖 3. 在橫切比較工具中顯示的改變結果

優(yōu)缺點

這項技術實際上是對上一項技術的優(yōu)化。通過只顯示改變,橫切比較工具可 以 幫助防止信息盲點。同時,cross-references 視圖要求選擇需要分析的建議或 者 類,而橫切比較工具使您可以檢查整個項目的改變。

缺點是橫切比較工具在方面影響多個聯(lián)結點時會不好用?紤]一個記錄所有 公 共方法的日志。這樣一個方面在哪怕的開發(fā)后也會增加十來個新改變,使得 查看其他更重要的改變變得困難了。在真實世界中,橫切比較工具可以有很多配 置,對某些方面的改變發(fā)出警報,而忽略與其他方面有關的改變。

III. 使用委派

方面可以并且通常用普通對象實現(xiàn)橫切行為?梢岳眠@種關注點的分離分 別 測試橫切規(guī)范及它們的行為。下面兩個模式展示如何使用委派和 mock 對象檢查 方面的這兩個部分。

模式 1. 測試委派的建議邏輯

針對 :橫切功能

概述 :如果還沒有做的話,可以將一些或者全部建議邏輯委派給其他可以直 接測試的類。(如果愿意的話,還可以將行為委派給方面的公共方法。)

例子:將突出顯示邏輯轉移到其他類

要更好地在隔離狀態(tài)下測試突出顯示邏輯,可以將它轉移到一個專門的工具 類 中:

private HighlightUtil highlightUtil = new CssHighlightUtil ();

 public void setHighlightUtil(HighlightUtil highlightUtil) {
 this.highlightUtil = highlightUtil;
 }

 String around(Highlightable highlightable) :
    highlightedTextProperties() && this(highlightable)
 {
   String result = proceed(highlightable);
  return highlightUtil.highlight(result, highlightable.getHighlightedWords ());
 }

通過抽取突出顯示邏輯,可以編寫調用 HighlightUtil 類的方法的單元測試 。

優(yōu)缺點

這項技術使得在域邏輯中產生邊緣用例更容易了。它還有助于隔離問題,如 果 helper 類的測試失敗,會知道是它而不是方面有問題。后,委派邏輯通常 會 得到更干凈的關注點分離。在這個例子中,通過將文字突出顯示邏輯抽取到其它 類,它變成系統(tǒng)其他部分可以獨立于這個方面使用的一項操作。從而使方面獲得 了使用不同的突出顯示策略的靈活性(HTML 的 CSS 突出顯示、純文本的全部大 寫突出顯示等等)。

上一頁12345下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd