假定已經編寫了 上一節中的測試代碼。為了使測試通過,必須將 Highlighter 方面分解為一個抽象方面和一個子方面,如下所示:
public abstract aspect AbstractHighlighter {
public abstract pointcut highlightedTextProperties();
//... aspect continues
}
public aspect HighlightResults extends AbstractHighlighter {
public pointcut highlightedTextProperties() :
(
//...define pointcut as before
);
}
下一步,用一個只用于測試案例的方面擴展 AbstractHighlighter 方面。下面我將它展示為測試案例的一個靜態內部方面:
private static aspect HighlightsTestClass extends AbstractHighlighter {
public pointcut highlightedTextProperties() :
execution(public String HighlightMockTarget.*(..));
}
這個方面通過選擇 mock 目標上所有的方法執行具體化了 highlightedTextProperties 切點。
優缺點
顯然,這種測試過程是一種人造的情況。對一個假的對象測試假的方面。不過,這只是表明測試的不是真正的切點。仍然可以驗證建議和抽象方面所指定的 ITD 代碼。在例子中,測試驗證建議正確地編組了來自 ITD 的數據以及原來聯結點的返回值、將它傳遞給一個工具類并返回新的結果。這涉及了相當多的行為。使用一個 mock 目標還使測試更清晰了,因為測試的讀者不必閱讀真正目標的行為以及方面的行為。這種測試在為方面庫編寫單元測試時特別有用,因為只有到了方面加入到具體的應用程序中以后才會有真實的目標。
如果將方面分解以利用這種模式的好處,那么您可能使它更具可擴展性。比如,如果系統的新部分需要參與突出顯示行為,那么它們可以擴展抽象的方面并定義覆蓋新情況的切點。這樣,抽象方面就與它所建議的系統解耦了。
模式 2. 測試與 mock 目標匹配的切點
針對 :橫切規范和功能
文章來源于領測軟件測試網 http://www.kjueaiud.com/