<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)  編輯  收藏 所屬分類: 單元測試及相關技術

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


    網站導航:
     
    主站蜘蛛池模板: 97人妻精品全国免费视频| 粉色视频成年免费人15次| 四虎国产精品永久免费网址| 亚洲乱码无码永久不卡在线| 中文成人久久久久影院免费观看| 国产亚洲精品AA片在线观看不加载 | 国产亚洲精品影视在线产品| 一边摸一边桶一边脱免费视频| 免费A级毛片无码A| 黄色大片免费网站| 亚洲一级特黄大片在线观看| 巨胸喷奶水www永久免费| 亚洲午夜国产精品无码老牛影视| 三级网站在线免费观看| 亚洲成AV人在线播放无码| 久久成人免费大片| 色婷五月综激情亚洲综合| 日韩电影免费在线| 大片免费观看92在线视频线视频| 亚洲乱码国产一区网址| 东方aⅴ免费观看久久av| 亚洲精品高清久久| 91视频国产免费| 美女露100%胸无遮挡免费观看| 国产精品亚洲二区在线观看| 久久青草91免费观看| 亚洲久悠悠色悠在线播放| 免费国产在线观看老王影院| 91国内免费在线视频| 亚洲精品mv在线观看| 女人18毛片a级毛片免费视频| 免费一级毛片在线播放视频免费观看永久| 久久精品国产亚洲5555| 18禁黄网站禁片免费观看不卡| 亚洲免费网站观看视频| 国产亚洲老熟女视频| 西西大胆无码视频免费| 暖暖免费中文在线日本| 亚洲韩国在线一卡二卡| 亚洲av麻豆aⅴ无码电影| 91精品国产免费网站|