qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          搭建一個UT測試用例過程中關(guān)聯(lián)和繼承的選擇

          首先交代下背景:
            在做軟件的UT時候,框架使用繼承的方式進行搭建,如下圖所示:
            類CTestCase是一個父類,包含了所有測試中公用的方法。
            其中虛函數(shù)RunTest()作為對外啟動測試的虛接口。
            Protect類型的CommonWorks()函數(shù)包含了一些必須的公用操作,包含了不可重入的一些變量和操作,將被具體測試用例調(diào)用。
            子類CConcreteTestCaseA是對軟件產(chǎn)品具體某一個特性的測試:
            其中屬性mTestAPara是測試A所獨有的針對A特性的一些配置參數(shù);
            SpecialWorksForCaseA是A特性特殊的一些操作封裝;
            繼承的方法RunTest用來實現(xiàn)具體的對特性A的操作,包括對特殊操作封裝函數(shù)SpecialWorksForCaseA的調(diào)用;
            現(xiàn)在的問題是,新出現(xiàn)了一個特性B,測試它需要調(diào)用CConcreteTestCaseA::SpecialWorksForCaseA,
            但是目前已知只有極少部分特性的測試需要調(diào)用這個操作,其他特性并不需要。
            我們可以考慮將B繼承自A,構(gòu)成3層繼承關(guān)系,如下所示:
            這樣做的好處在于所有不可重入的變量和方法都會被保護起來。
            但是從邏輯上出現(xiàn)了 “B is a A” 的悖論。

            另一種選擇則是使用關(guān)聯(lián)關(guān)系,A與B保持邏輯上的sibling的關(guān)系不變,但是使用關(guān)聯(lián)來實現(xiàn)一種類似于單一Composite的結(jié)構(gòu),如下所示:
            這樣做的好處在于如下幾點:
            主要的優(yōu)點是保持了A與B邏輯上的關(guān)系正確性,而非“認兄為父”;
            當A已經(jīng)存在的時候,不需要更多額外的修改就可以完成這種工作;
            相比于直接復(fù)制SpecialWorksForCaseA中的操作,當A邏輯發(fā)生改變的時候,更加容易更新;
            相比于將SpecialWorksForCaseA提取到父類的CommonWorks的做法,縮減了父類的復(fù)雜性和規(guī)模,邏輯上成立。
            缺點在于:
            當A中的mTestArgs依賴于父類的mTestConfiguration時候,類CaseA的實例化需要增加復(fù)雜度。

          posted on 2014-01-30 11:46 順其自然EVO 閱讀(579) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 中方县| 邓州市| 广宗县| 旺苍县| 道孚县| 永年县| 泸州市| 房产| 延津县| 特克斯县| 巴中市| 清水河县| 万载县| 湖州市| 南昌县| 茶陵县| 宜章县| 民县| 沅陵县| 新巴尔虎左旗| 金昌市| 大邑县| 昆山市| 柳林县| 珠海市| 朝阳市| 桂林市| 五常市| 儋州市| 襄垣县| 台州市| 大理市| 中西区| 昌乐县| 安乡县| 德钦县| 平武县| 措美县| 炉霍县| 云安县| 西林县|