您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
JUNIT源碼探秘系列(下)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/4/16 14:34:04 ] 推薦標(biāo)簽:

JUNIT源碼探秘(四):Junit代碼分析之命令模式

 Junit在執(zhí)行測(cè)試代碼時(shí),使用了命令模式,那么什么是命令模式,拿幾個(gè)例子來說明下。

在《java與模式》書中,用一個(gè)很生動(dòng)的例子來說明命令模式,“玉帝傳美猴王上天”。在這我們也用這個(gè)例子說明下;這個(gè)事情整個(gè)過程如下:

玉帝傳美猴王上天

整個(gè)過程有兩個(gè)很明顯的角色,玉帝和美猴王;仔細(xì)想想,這個(gè)玉帝不可能親自教美猴王去吧?那么派誰(shuí)去呢?通過簡(jiǎn)單分析,兩外一個(gè)角色出現(xiàn)了,傳遞命令者(設(shè)計(jì)模式中叫調(diào)用者)宮中的跟隨者或者太監(jiān)等人,那么玉帝派太白金星;光太白金星自己去還不行,必須拿著玉帝的信物,比如圣旨、或者其他。那么到底是什么東西呢?這個(gè)要看玉帝給他什么東西,他拿什么東西;在仔細(xì)想想,那么玉帝給的東西可能裝在一個(gè)盒子里或者信封里,具體什么東西都無所謂了,那么我們可以把這個(gè)盒子或者信封看做這個(gè)信物的接口,而盒子或者信物里的具體信物看做一個(gè)實(shí)現(xiàn)類。

通過這么一分析,那么我們可以看出整個(gè)命令模式中有五個(gè)對(duì)象:

傳遞信物的盒子或者信封

信封或者盒子中的具體信物

傳遞信息者太白金星

下達(dá)指令者玉皇大帝

執(zhí)行命令著美猴王

在命令模式中剛好也有五個(gè)角色如下:

客戶(Client)角色:創(chuàng)建一個(gè)具體的命令(ConcreteCommand)對(duì)象,并確定其接受者。這個(gè)角色當(dāng)然是玉皇大帝了。

命令(Command)角色:聲明給所有具體命令類的抽象接口,這是一個(gè)抽象角色,通常通過java的接口實(shí)現(xiàn);這個(gè)對(duì)應(yīng)到這個(gè)實(shí)例中可以看做是傳遞信物的盒子或者信封等

具體命令(ConcreteCommand)角色:定義一個(gè)接收者和行為之間的弱耦合,實(shí)現(xiàn)execute()方法,負(fù)責(zé)調(diào)用接受者的相應(yīng)操作,execute()方法通常叫執(zhí)行方法,對(duì)應(yīng)到實(shí)例可以看做是盒子里的具體信物,比如圣旨、或者其他具有玉皇大帝省份標(biāo)示的東西

請(qǐng)求者(Invoker)角色:負(fù)責(zé)調(diào)用命令對(duì)象執(zhí)行請(qǐng)求,相關(guān)的測(cè)試方法叫做行動(dòng)方法。在這個(gè)實(shí)例中太白金星扮演這個(gè)角色。

接受者(Receiver)角色:負(fù)責(zé)具體實(shí)施和請(qǐng)求一個(gè)請(qǐng)求。任何一個(gè)類都可以成為接受者,實(shí)施和執(zhí)行請(qǐng)求的方法叫做行動(dòng)方法。這個(gè)實(shí)例中這個(gè)角色自然是美猴王了。

       具體代碼實(shí)現(xiàn),先從接受者開始

         接受者(Receiver)

public class Receiver {

   public void doAction(){

      System.out.println("上天");

   }

}

命令(Command)

public interface Command {

   public void execute();

}

具體命令(ConcreteCommand)

public class ConcreteCommand implements Command {

   private Receiver receiver;

 

   public ConcreteCommand(Receiver receiver) {

      this.receiver = receiver;

   }

   public void execute() {

      receiver.doAction();

   }

}

 

請(qǐng)求者(Invoker)

public class Invoker {

   private Command command;

   public Invoker(Command command) {

      this.command = command;

   }

   public void doInvokerAction() {

      command.execute();

   }

}

客戶(Client)

public class Client {

   public static void main(String[] args)

   {

      Receiver receiver = new Receiver();   

      Command command = new ConcreteCommand(receiver);

      Invoker invoker = new Invoker(command);

      invoker.doInvokerAction();

   }

}

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