您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 >
追求代碼質(zhì)量: 用AOP進(jìn)行防御性編程
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/25 14:10:13 ] 推薦標(biāo)簽:

因?yàn)槲矣玫氖?OVal,所以我可以完成下列任務(wù):

    對(duì) fileSet 類(lèi)成員指定一個(gè)約束條件,確保使用 @Size 標(biāo)注時(shí)其大小總是至少為 1 或更大。
    確保在使用 @PreValidateThis 標(biāo)注調(diào)用 execute() 方法前 驗(yàn)證這個(gè)約束條件。

這兩步讓我能夠有效地去除 validate() 方法中的條件檢驗(yàn),讓 OVal 為我完成這些,如清單 11 所示:

清單 11. 經(jīng)過(guò)改進(jìn)、無(wú)條件檢驗(yàn)的 HierarchyBuilderTask

    
    @Guarded
public class HierarchyBuilderTask extends Task {
 private Report report;

 @Size(min = 1)
 private List fileSet;

 private void validate() throws BuildException {
  if (this.report == null) {
   this.log("no report defined, printing XML to System.out");
  }
 }

 @PreValidateThis
 public void execute() throws BuildException {
  validate();
  String[] classes = this.getQualifiedClassNames(this.fileSet);
  Hierarchy[] hclz = new Hierarchy[classes.length];

  try{
   for(int x = 0; x < classes.length; x++){          
    hclz[x] = HierarchyBuilder.buildHierarchy(classes[x]);            
   }       
   BatchHierarchyXMLReport xmler = new BatchHierarchyXMLReport(new Date(), hclz);
   this.handleReportCreation(xmler);
  }catch(ClassNotFoundException e){
   throw new BuildException("Unable to load class check classpath! " + e.getMessage());
  } 
 }
 //more methods below....
}


清單 11 中的 execute() 一經(jīng)調(diào)用(由 Ant 完成),OVal 會(huì)驗(yàn)證 fileSet 成員。如果其為空,意味著沒(méi)有指定任何要評(píng)估的類(lèi),會(huì)拋出一個(gè) ConstraintsViolatedException。這個(gè)異常會(huì)暫停這一過(guò)程,像初始代碼一樣,只不過(guò)初始代碼會(huì)拋出一個(gè) BuildException。

結(jié)束語(yǔ)

防御性編程結(jié)構(gòu)阻止了一個(gè)又一個(gè)缺陷,但這些結(jié)構(gòu)本身卻不免為代碼添加了重復(fù)的邏輯。把防御性編程技術(shù)和面向方面編程(通過(guò)契約式設(shè)計(jì))聯(lián)系起來(lái)是抵御所有重復(fù)性代碼的一道堅(jiān)強(qiáng)防線。

OVal 并不是惟一可用的 DBC 庫(kù),事實(shí)上其 DBC 結(jié)構(gòu)對(duì)比其他框架來(lái)說(shuō)是相當(dāng)有限的(例如,它未提供指定類(lèi)不變式的簡(jiǎn)易方法)。從另一方面講,OVal 很容易使用,對(duì)約束條件也有很大的選擇余地,若想要花少量力氣可向代碼添加驗(yàn)證約束條件,它無(wú)疑是個(gè)上佳之選。另外,用 OVal 創(chuàng)建定制約束條件也相當(dāng)簡(jiǎn)單,所以請(qǐng)不要再添加條件檢驗(yàn)了,盡情享用 AOP 吧!

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