您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 >
AOP@Work: 對(duì)方面進(jìn)行單元測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/12 17:03:58 ] 推薦標(biāo)簽:

優(yōu)缺點(diǎn)

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

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

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

針對(duì) :橫切規(guī)范

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

例子:改寫(xiě)一個(gè)切點(diǎn)

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

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

然后在源代碼中適當(dāng)位置上添加注釋?zhuān)纾?/p>

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

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

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

優(yōu)缺點(diǎn)

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

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

III. 使用委派

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

模式 1. 測(cè)試委派的建議邏輯

針對(duì) :橫切功能

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

例子:將突出顯示邏輯轉(zhuǎn)移到其他類(lèi)

要更好地在隔離狀態(tài)下測(cè)試突出顯示邏輯,可以將它轉(zhuǎn)移到一個(gè)專(zhuān)門(mén)的工具 類(lè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 ());
 }

通過(guò)抽取突出顯示邏輯,可以編寫(xiě)調(diào)用 HighlightUtil 類(lèi)的方法的單元測(cè)試 。

優(yōu)缺點(diǎn)

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

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