您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
JUnit源碼分析:Command模式和Composite模式
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/5/28 15:54:28 ] 推薦標(biāo)簽:

3.UML圖:

圖中單個(gè)對(duì)象是樹(shù)葉(Leaf),而組合結(jié)構(gòu)是Compoiste,它維護(hù)了一個(gè)Leaf的集合。而Component是一個(gè)抽象角色,給出了共有接口和默認(rèn)行為,也是JUnit源碼中的Test接口。

4.效果:
1)定義了基本對(duì)象和組合對(duì)象的類層次結(jié)構(gòu),通過(guò)遞歸可以產(chǎn)生更復(fù)雜的組合對(duì)象
2)簡(jiǎn)化了客戶代碼,客戶可以使用一致的方式對(duì)待單個(gè)對(duì)象和組合結(jié)構(gòu)
3)添加新的組件變的很容易。但這個(gè)會(huì)帶來(lái)一個(gè)問(wèn)題,你無(wú)法限制組件中的組件,只能靠運(yùn)行時(shí)的檢查來(lái)施加必要的約束條件

    具體到JUnit源碼,單個(gè)對(duì)象是TestCase,而復(fù)合結(jié)構(gòu)是TestSuite,Test是抽象角色只有一個(gè)run方法。TestSuite維護(hù)了一個(gè)TestCase對(duì)象的集合fTests:

<!---->     private Vector fTests= new Vector(10);
      /**
     * Adds a test to the suite.
     */
    public void addTest(Test test) {
        fTests.addElement(test);
    }
    /**
     * Runs the tests and collects their result in a TestResult.
     */
    public void run(TestResult result) {
        for (Enumeration e= tests(); e.hasMoreElements(); ) {
              if (result.shouldStop() )
                  break;
            Test test= (Test)e.nextElement();
            test.run(result);
        }
    }

當(dāng)執(zhí)行run方法時(shí)遍歷這個(gè)集合,調(diào)用里面每個(gè)TestCase對(duì)象的run()方法,從而執(zhí)行測(cè)試。我們使用的時(shí)候僅僅需要把TestCase添加到集合內(nèi),然后用一致的方式(run方法)調(diào)用他們進(jìn)行測(cè)試。

考慮使用Composite模式之后帶來(lái)的好處:
1)JUnit可以統(tǒng)一地處理組合結(jié)構(gòu)TestSuite和單個(gè)對(duì)象TestCase,避免了條件判斷,并且可以遞歸產(chǎn)生更復(fù)雜的測(cè)試對(duì)象
2)很容易增加新的TestCase。

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