• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    通過測試分類實現敏捷構建

    發布: 2008-4-03 17:15 | 作者: Andrew Glover | 來源: IBM | 查看: 61次 | 進入軟件測試論壇討論

    領測軟件測試網


    清單 1. 用于組件測試的 TestSuite
    package test.org.acme.widget;import junit.framework.Test;import junit.framework.TestSuite;import test.org.acme.widget.*;public class ComponentTestSuite { public static void main(String[] args) {  junit.textui.TestRunner.run(ComponentTestSuite.suite()); } public static Test suite(){  TestSuite suite = new TestSuite();  suite.addTestSuite(DefaultSpringWidgetDAOImplTest.class);  suite.addTestSuite(WidgetDAOImplLoadTest.class);  ...  suite.addTestSuite(WidgetReportTest.class);  return suite; }}

    定義 TestSuite 的過程的確需要瀏覽現有的測試,并將它們添加到相應的類中(即,將所有的單元測試添加到一個 UnitTestSuite 中)。這也意味著,由于在一個給定分類中編寫新測試,不得不將它們按照一定的程序添加到適當的 TestSuite 中,當然,還需要重新編譯 它們。

    運行獨立的 TestSuites,然后試著創建單一的 Ant 任務,Ant 任務調用正確的測試集?梢远x一個 component-test 任務,用于組織 ComponentTestSuite 等,正如清單 2 中所示:


    清單 2. 只運行組件測試的 Ant 任務
    <target name="component-test"            if="Junit.present"            depends="junit-present,compile-tests"> <mkdir dir="${testreportdir}"/>    <junit dir="./" failureproperty="test.failure"              printSummary="yes"              fork="true" haltonerror="true">   <sysproperty key="basedir" value="."/>        <formatter type="xml"/>         <formatter usefile="false" type="plain"/>        <classpath>    <path refid="build.classpath"/>           <pathelement path="${testclassesdir}"/>            <pathelement path="${classesdir}"/>         </classpath>   <batchtest todir="${testreportdir}">    <fileset dir="test">     <include name="**/ComponentTestSuite.java"/>                     </fileset>   </batchtest> </junit></target>

    理想情況下,還需要有調用單元測試和系統測試的任務。最后,在想要運行整個測試套件時,應該創建一個依賴于所有三種測試種類的第四項任務,如清單 3 中如示:


    清單 3. 用于所有測試的 Ant 任務
    <target name="test-all" depends="unit-test,component-test,system-test"/>

    創建定制 TestSuite 是實現測試分類的一個快速解決方案。這個方法的缺點是:一旦創建新測試,就必須通過編程將它們添加到適當的 TestSuite 中,這很痛苦。為每種測試創建定制目錄更具擴展性,且允許 經過重新編譯就添加新的經過分類的測試。





    回頁首


    創建定制目錄

    我發現,用 JUnit 實現測試分類最簡單的方法是將測試在邏輯上劃分為與其測試類型相應的特定目錄。使用這項技術,所有的單元測試將駐留在一個 unit 目錄中,所有的組件測試將駐留在一個 component 目錄中,依此類推。

    例如,在一個保存所有未分類測試的 test 目錄中,可以創建三個新的子目錄,如清單 4 所示:


    清單 4. 實現測試分類的目錄結構
    acme-proj/       test/          unit/          component/          system/           conf/

    為運行這些測試,必需至少定義四個 Ant 任務:為單元測試定義一個,為組件測試定義一個,依此類推。第 4 項任務是一個方便的任務,它運行所有三種測試類型(如 清單 3 所示)。

    該 JUnit 任務和 清單 2 中定義的任務非常相似。所不同的是該任務 batchtest 方面的一個細節。此時,fileset 指向一個具體的目錄。在清單 5 的例子中,它指向 unit 目錄。


    清單 5. 用于運行所有單元測試的 JUnit 任務的批量測試方面
    <batchtest todir="${testreportdir}"> <fileset dir="test/unit">   <include name="**/**Test.java"/>        </fileset></batchtest>

    請注意,這個測試只運行 test/unit 目錄下的所有測試。當創建了新的單元測試(或針對此問題的任何其他測試),只需要將它們放到該目錄下,一切就準備妥當了!比起需要將一行新代碼添加到 TestSuite 文件并進行重新編譯,這樣還是多少簡單了一點。


    問題解決了!

    回到最初的場景中,假設您和您的團隊認為使用特定目錄是針對構建時間問題的最具擴展性的解決方案。該任務最困難的地方是檢查及分配測試類型。您重構了 Ant 構建文件并創建了 4 項新任務(為單個的測試類型創建了三項,為運行所有這些測試類型創建了一項)。不僅如此,您還修改了 CruiseControl,從而只在(代碼)簽入時運行真正的單元測試,并以小時為基礎運行組件測試。在進一步檢查之后,發現系統測試也可以按小時運行,所以您創建了一個將組件測試和系統測試一起運行的額外任務。

    最終結果是,測試每天都運行很多次,您的團隊能夠更快地發現集成錯誤 —— 通常在幾個小時之內。

    當然,創建敏捷性構建并未解決全部問題,但它在確保代碼質量方面確實扮演了至關重要的角色。測試運行得更加頻繁了,針對開發人員測試價值的顧慮成為一段遙遠的記憶。另外,更重要的是,現在 2006 年您的公司獲得了極大的成功!

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    33/3<123

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>