概述 :這項技術與上一技術密切相關。這次不是擴展一個抽象類,而是編寫 mock 目標,以使它匹配要測試的方面上的一個切點?梢酝ㄟ^檢查方面是否建議了 mock 目標來測試切點是否正確。如果要測試的切點過度專門化,那么可能需要重新編寫它,使得 mock 目標可以更容易地“預定”建議。
示例:基于一個標志接口測試切點
不是使突出顯示方面成為抽象的,而是改寫切點使它匹配 Highlightable 接口上的方法執行:
public pointcut highlightedTextProperties() :
execution(public String Highlightable+.get*());
這種寬泛的切點匹配 Highlightable 上的所有 String getter。因為切點不枚舉特定的類,它已經匹配了 mock 目標上的 getSomeString() 方法。測試的其余部分保持不變。
變化:使用一個注釋
還可以編寫切點以部分根據 Java 5.0 元數據進行匹配。例如,下面修改后的切點匹配用 @Highlighted 注釋修飾的方法執行:
public pointcut HighlightedTextProperties() :
execution(@Highlighted public String Highlightable+.*());
//you can apply the annotation in the source, or using the declare-annotation form
declare @method : public String SearchResult+.getTitle(..) : @Highlighted;
declare @method : public String SearchResult+.getProduct(..) : @Highlighted;
可以通過添加注釋到其 getSomeString() 方法,使 mock 目標匹配新的切點:
@Highlighted
public String getSomeString() {
return "I am a big bear!";
}
優缺點
這項技術還明確地分離了對方面行為與目標應用程序的行為的測試,使測試變為更獨立。如果切點還沒有編寫為容納 mock 目標,那么應當通過重新編寫它們得到一個耦合更松散的方面。通過使方面足夠一般化,可以影響測試類中的 mock 目標,還會保證它可以容易地讓真實類參與方面的行為。
模式 3. 驗證更復雜的切點(一個特殊情況)
文章來源于領測軟件測試網 http://www.kjueaiud.com/