<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    賢仁居 George Gong
    It's never too late to learn
    posts - 32,comments - 16,trackbacks - 0

        最近一直在看《JUnit in Action》一書,前幾章看的還行,到第九章就出問題了,因為我的Cactus總是配置不好,運行不起來。前幾章還講到了很多框架,比如Jetty、EasyMock、Clover等,也只是用了一次,它們的深奧之處還未領悟多少。索性選中Clover,看其一二。
        《JUnit in Action》對Clover也是一帶而過,只提了一下。在網上搜了半天,可參考的資料也很少,只有“java單元測試篇:使用clover為java代碼的junit測試做覆蓋率分析”一篇文章,轉載的人很多,看了一些,發現文章中遺漏了很多代碼,不知道是不是轉載的問題。文中的例子是Junit包里帶的,在Clover包的tutorial中也有,最后發現這篇文章是翻譯的Clover的clover-manual.pdf中的Tutorials一章。讀者可以參考其英文原文。
        下面還是簡要的介紹一下Clover在JUnit中的使用(構建工具為Ant):
        1.在使用Clover做測試覆蓋率分析之前請確保您的代碼及測試代碼無誤。
        2.如果采用Ant作為構建工具,則將clover.jar放入Ant的classpath下。也可采用另一種方法,可先將clover.jar及Clover中的另一個jar包cenquatasks.jar放入項目的lib下,采用cenquatasks.jar中的extendclasspath方法將clover.jar擴展到Ant下,在build.xml中加入以下代碼:

    <taskdef resource="com/cenqua/ant/antlib.xml" classpath="lib/cenquatasks.jar"/>
    <extendclasspath path="lib/clover.jar"/>
    <taskdef resource="clovertasks" classpath="lib/clover.jar"/>
        3.添加clovertask到Ant中,如下:
    <taskdef resource="clovertasks"/>
        4.在build.xml中加入clover的初始化任務:
      <!-- clover.init-->
      
    <target name="clover.init">
        
    <clover-setup initString="clover_coverage.db" preserve="true"/>
      
    </target>
    注意:步驟3中的代碼可放入4中。
        5.加入一個或多個運行clover report的任務,最后的結果有多種輸出方式:html、pdf、swing、xml等等。
    其中,swing方式的代碼如下:
     <!-- show the clover coverage result with swing -->
       
    <target name="clover.swing" depends="clover">
            
    <clover-view/>
       
    </target>
    html方式如下:
     <!-- show the clover coverage result with html file -->
     
    <target name="clover.html" depends="clover">
        
    <clover-report>
          
    <current outfile="${target.dir}/clover" title="Clover Report">
            
    <format type="html"/> 
          
    </current>     
        
    </clover-report>
      
    </target>
        上面代碼中都depends="clover",這里clover任務只是為了簡潔而設,代碼如下:
    <!-- runs the clover -->
        
    <target name="clover" depends="clean,clover.init,compile,test"/>
        通過以上代碼的設置即可運行clover.swing 或者clover.html運行Clover查看測試代碼的覆蓋率。測試結果如下圖所示:
         其中build.xml中的運行JUnit測試代碼的任務如下:
     <!-- runs the tests -->
         
    <target name="test">
            
    <java classname="MoneyTest"  fork="yes">
                
    <classpath refid="build.classpath"/>
            
    </java>
         
    </target>
    這是通過java命令運行的,也就是在MoneyTest.java中有main方法:
    public static void main(String args[]) {
            junit.textui.TestRunner.run(MoneyTest.
    class);
        }
    還可以直接通過junit命令運行,如下:
    <target name="unittest" depends="clover.init,compile" description="Test the application">
            
    <taskdef resource="clovertasks"/>
            
    <echo message="Testing the application with junit.."/>
            
    <junit haltonfailure="true" printsummary="true"  fork="true">
                    
    <classpath refid="build.classpath"/>
                    
    <classpath>
                            
    <pathelement path="${ant.home}/lib/clover.jar"/>
                    
    </classpath>
                    
    <formatter type="brief" usefile="false"/>
        
    <!--            <test name="MoneyTest"/>   -->
                    
    <batchtest>
                            
    <fileset dir="${build}" includes="**/*Test.class"/>
                    
    </batchtest>
            
    </junit>
    </target>
    以上兩種test方法都可使用。
        在所有任務中,首先要運行clover.init這樣就能啟動clover,對后面的任務進行監控并adapt一些操作,在隨后的compile過程中,clover會記錄所編譯的java文件的各種數據并存入其db數據庫,clover會監控隨后運行的UnitTest,計算測試的覆蓋率并寫入數據庫。這里有一點要注意:無論是采用java方式還是junit方式運行test房間,都要在命令中加入屬性fork="true",這是因為clover要在JVM shutdown的時候將數據寫入數據庫,如果沒有這個屬性,就會出現“no coverage data found for *.db”錯誤,出現測試覆蓋率均為0的結果。
    posted on 2007-07-29 00:04 George Gong 閱讀(3015) 評論(0)  編輯  收藏 所屬分類: 單元測試及相關技術

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲国产一区二区三区| 搡女人真爽免费视频大全| 亚洲人成色7777在线观看不卡 | 57pao一国产成视频永久免费| 亚洲免费人成在线视频观看| 中文永久免费观看网站| 中文字幕亚洲一区二区va在线| 免费夜色污私人影院网站| 免费一区二区视频| 无码 免费 国产在线观看91| 亚洲男人天堂2020| 最新亚洲成av人免费看| 亚洲大尺度无码无码专区| 特级精品毛片免费观看| 久久亚洲精品成人AV| a拍拍男女免费看全片| 国产日本亚洲一区二区三区| 最近中文字幕mv免费高清电影 | 黄色免费网站在线看| 亚洲熟伦熟女新五十路熟妇| 九九九精品视频免费| 亚洲国产成人一区二区精品区 | 亚洲午夜电影一区二区三区| 91精品国产免费久久久久久青草| 亚洲一级黄色大片| 日日操夜夜操免费视频| 国产成人精品免费大全| 亚洲黄色网址大全| 成年女人午夜毛片免费视频| 免费激情网站国产高清第一页| 最新精品亚洲成a人在线观看| 亚洲精品免费观看| 亚洲国产精品无码久久九九大片| 亚洲成av人片一区二区三区| 国产精成人品日日拍夜夜免费| 亚洲人成人77777网站不卡| 四虎永久成人免费| a级日本高清免费看| 狠狠色伊人亚洲综合网站色| 亚洲高清偷拍一区二区三区 | 国内精品免费麻豆网站91麻豆|