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

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

不利的一面是,這種技術在邏輯難于抽取時無能為力了。例如,好讓簡 單 的邏輯留在原處。同時,一些方面將狀態存儲到本地或者它們建議的類的 ITD 中 。狀態存儲通常構成了方面邏輯的簽名部分,它并不總能干凈地轉移到 helper 類中。

模式 2. 使用模擬對象記錄建議觸發

針對 :橫切規范和功能

概述 :這項技術補充了前一項技術。如果將建議行為抽取到另一個類中,那 么可以用一個 mock 對象替代 helper 類對象,并驗證建議是否在正確的聯結 點上觸發。還可以驗證建議將正確的上下文傳遞給了 helper 類,不管是直接用 建議參數還是用之前存儲的狀態。

注: 如果需要對 mock 對象的介紹,請參閱 參考資料。

例子:用一個 mock HighlightUtil 測試 Highlighter 方面

我們已經看到了方面如何委派到另一個類中以處理實際的文字突出顯示。這 使 得在測試中向方面注入不同的 highlighter 實現成為可能。清單 3 中的代碼利 用 JMock 庫做到了這一點。(請參閱 參考資料。)

清單 3. 用 JMock 測試來自方面的調用

public class DelegatedHighlightingUnitTest extends MockObjectTestCase {
Collection words;
private HighlightUtil original;
private SearchResult result;
private Mock mockUtil;
public void setUp() throws Exception {
super.setUp();
setUpMockHighlightUtil();
words = Collections.singleton("big");
result = new SearchResult();
result.setTitle("I am a big bear!");
result.setHighlightedWords(words);
}
private void setUpMockHighlightUtil() {
original = HighlightResults.aspectOf().getHighlightUtil();
mockUtil = mock(HighlightUtil.class);
HighlightResults.aspectOf().setHighlightUtil((HighlightUtil) mockUtil.proxy());
}
public void testHighlightUtilAppliedToTitleOfSearchResult() {
mockUtil.expects(once())
.method("highlight")
.with(eq("I am a big bear!"), eq(words));
result.getTitle();
}
}

setUp() 方法實例化 mock 對象并將它注入到方面中。測試方法告訴 mock 等待對名為 “highlight” 的方法的調用,這個方法有兩個參數:getTitle() 的返回值和在 SearchResult 中存儲的單詞清單。設置了期望后,測試調用 getTitle() 方法,它應當觸發方面并產生預期的對 mock 的調用。如果 mock 沒有收到調用,那么它會在銷毀時自動使測試失敗。

注意 setUp() 方法存儲了到原來 HighlightUtil 的引用。這是因為方面像 大多數對象一樣,是單元素(singleton)的。因此,銷毀時撤銷 mock 注入的 影響很重要,否則,mock 會持續留在方面中并影響其他測試。這個方面的正確 銷毀如下所示:

@Override
protected void tearDown() throws Exception {
try {
HighlightResults.aspectOf().setHighlightUtil(original);
} finally {
super.tearDown();
}
}

優缺點

這個模式對前一個模式做了補充,只是它測試方面的橫切規范和上下文處理 而不是橫切行為。因為不用檢查方面的輸出的間接副作用,所以可以更容易地產 生聯結點匹配和上下文傳遞行為中的臨界用例。

重要的是要認識到委派邏輯的優缺點,用 mock 進行測試對于使用對象或方 面的技術都是類似的。在這兩種情況下,都是分離關注點,然后以更隔離的方法 驗證每一個關注點。

對于注入 mock 來說,有一個特定于方面的問題。如果使用單元素方面(默 認的),那么對于方面的字段所做的所有改變,如用 mock 替換一個字段,在測 試結束時都必須撤銷。(否則,mock 會掛起并可能影響系統的其他部分。)這 種銷毀邏輯很難實現和記憶。編寫一個測試清理方面,自動在每次測試后像在例 子中那樣重新設置方面從概念上來說是簡單的,但是其細節超出了本文的范圍。

IV. 使用 mock 目標

在后一節中,我介紹了我自己發明的、用于描述在編寫方面測試時用到的 一種測試 helper 類類型的術語:mock 目標。在方面之前的世界中,一個 mock 對象 表示一個(手寫或者動態生成)的類,它模仿要測試的一些類的協作器。 與此類似,mock 目標 是一個模仿要測試的一些方面的合法建議目標的類。

為了創建 mock 目標,編寫一個與生產中的建議有某些相似結構或者行為的 類。例如,如果對于由 getter 返回的文字的突出顯示感興趣,可以編寫下面這 樣的一個 mock 目標:

//an inner class of the enclosing test case
public class HighlightMockTarget implements Highlightable {
public String getSomeString() {
return "I am a big bear!";
}
}

上一頁12345下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 久久精品波多野结衣 | 黄色网址亚洲 | 天天看天天摸 | 黄色 在线播放 | 日本aⅴ在线不卡免费观看 日本aaa大片 | 午夜在线观看免费观看大全 | 黄色美女免费看 | 免费人成在线观看视频播放 | 亚洲免费小视频 | 波多野结衣精品一区二区三区 | 国产精品2022不卡在线观看 | 欧美人与牲动交a欧美精品 欧美人与日本人xx在线视频 | 成人国内精品久久久久影 | 三级毛片黄色 | yy4138理论片在线大全 | 成人久久久精品乱码一区二区三区 | 人人添人人澡人人澡人人诱 | 全免费a级毛片免费看视频免 | 99干99| 免费日批视频 | 日韩中文字幕高清在线专区 | 欧美日韩国产超高清免费看片 | 精品在线视频一区 | 亚州毛色毛片免费观看 | 91精品视频在线观看免费 | 国产精品亚洲二区 | 花蝴蝶亚洲一区二区三区 | 久久精品麻豆日日躁夜夜躁 | 国产三级a三级三级野外 | 欧美一级欧美一级在线播放 | 日日噜噜夜夜狠狠va视频 | 国产aaa女人十八毛片 | 免费动漫无遮挡曰批视频软件 | 婷婷激情狠狠综合五月 | 成人观看免费大片在线观看 | 91探花国产综合在线精品 | 毛片福利视频 | 丁香六月婷婷综合 | 91精品国产免费网站 | 最近的免费中文字幕视频 | 亚洲欧美另类日本久久影院 |