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

特別注意Client中的

Command command = new ConcreteCommand(receiver);

Invoker invoker = new Invoker(command);

個(gè)人理解,這兩塊大的區(qū)別是Invoker調(diào)用的是一個(gè)借口類(lèi)(當(dāng)然在實(shí)際中可以也可以不是),在識(shí)別Invoker時(shí)注意調(diào)用的對(duì)象是否是一個(gè)接口對(duì)象。兩外,命令模式各個(gè)角色之間的關(guān)系如下圖所示。

Client和Invoker之間是一種弱關(guān)聯(lián)的依賴(lài)關(guān)系。

在Junit為什么要適用命令模式呢?Junit中使用命令模式有什么好處呢?

先看看在Junit中為什么要使用命令模式,在這我們先看看Junit的執(zhí)行過(guò)程的時(shí)序圖,啟動(dòng)一次執(zhí)行時(shí),TestRunner先解析加載后,然后通過(guò)TestSuite、TestCase中的run方法繼續(xù)解析成一個(gè)個(gè)Junit的測(cè)試方法(testcase),緊接著通過(guò)TestResult調(diào)用TestCase中的執(zhí)行方法,通過(guò)TestCase中的runBare方法終調(diào)我們自己寫(xiě)的測(cè)試代碼(含有testXXX的測(cè)試方法)。

 通過(guò)對(duì)Junit代碼的分析,TestRunner相當(dāng)于命令模式中的客戶(hù)(Client)角色,在TestRunner中main方法和doRun方法中的實(shí)現(xiàn)和命令模式中的Client的代碼實(shí)現(xiàn)非常相似,具體如下

public static void main(String args[]) {

      TestRunner aTestRunner= new TestRunner();

      try {

         TestResult r= aTestRunner.start(args);

//在start方法通過(guò)調(diào)用返回doRun方法

         } catch(Exception e) {

         System.err.println(e.getMessage());

         System.exit(EXCEPTION_EXIT);

      }

   }

   public TestResult doRun(Test suite, boolean wait) {

      TestResult result= createTestResult();

      result.addListener(fPrinter);

      long startTime= System.currentTimeMillis();

      suite.run(result);

      long endTime= System.currentTimeMillis();

      long runTime= endTime-startTime;

      fPrinter.print(result, runTime);

      pause(wait);

      return result;

}

而命令(Command)角色是Junit中的TestCase(繼承Test)。

具體命令(ConcreteCommand)是我們所寫(xiě)的測(cè)試方法,比如testXXX等所在的類(lèi)

具體請(qǐng)求者(Invoker)則是TestResult,通過(guò)TestResult調(diào)用run方法,進(jìn)而調(diào)用執(zhí)行方法,

在Junit真正執(zhí)行調(diào)用測(cè)試用例testcase則是在Junit中TestCase真正實(shí)現(xiàn)后的執(zhí)行,所有說(shuō)接收者(Receiver)接收者是TestCase,TestCase在命令模式中充當(dāng)了多個(gè)角色,當(dāng)然這塊也可以在加一個(gè)類(lèi)TestRun實(shí)現(xiàn)測(cè)試測(cè)試執(zhí)行。但不知作者為什么要直接在TestCase中實(shí)現(xiàn)測(cè)試代碼的終執(zhí)行?

后我們?cè)僬f(shuō)說(shuō)在這塊用命令模式有什么好處?
我理解在這塊大的好處是,解耦了具體命令者(我們自己寫(xiě)的testXXX方法)和TestCase,兩外,實(shí)現(xiàn)了測(cè)試執(zhí)行者TestRUnner和命令接受者TestResult的耦合,是命令請(qǐng)求和命令執(zhí)行的對(duì)象分割。

另外補(bǔ)充一點(diǎn),對(duì)于大多數(shù)請(qǐng)求-響應(yīng)模式的功能,比較適合使用命令模式,正如命令模式定義說(shuō)的那樣,命令模式對(duì)實(shí)現(xiàn)記錄日志、撤銷(xiāo)操作等功能比較方便。

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