每日構建中的測試覆蓋

       每日構建(包含自動化測試,至少我是這麼做的)可以保證我們的代碼每天都在可控制的範圍內,任何人對於代碼庫中的修改都能通過每日構建反饋給開發小組,但是我們如何知道我們所有的測試是否夠呢,我們是否遺漏的某些代碼的四角了,這些問題通過簡單的測試報告是無法獲知的,幸好我們有代碼測試覆蓋工具可以幫助我們消除我們的擔憂.

  下面我來說一下自己是如何實踐代碼覆蓋率測試的.

   如下我已經擁有了自己的工程,工程結構圖如下

工程中的ant build是通過eclipse自動生成的,生成方法爲右擊工程名-->export.

 大家可以根據自己的需要來選擇生成腳本,我對於家裏自己的工程基本都是用eclipse自己的生成的,至於公司則全部手寫,其實ant手寫也挺快的,而且也非常簡單.

好了,我們現在有了ant 腳本,我們加下來需要做的就是將單元測試覆蓋的功能加進去.我選擇使用cobertura,免費的鼕鼕生成的報告非常有用,而且能和ant非常好的集成.ant本身並沒有cobertura的task支持,我們需要做點手腳讓ant明白我們要用cobertura.

首先當然是從cobertura的官網上(http://cobertura.sourceforge.net/)下載cobertura的最新版本,現在最新版本爲1.9.

接下來我們需要在我們的build腳本中聲明cobertura的 task

    <property name="cobertura.dir" value="D:/developTools/cobertura-1.9" />
    
<path id="cobertura.classpath">
        
<fileset dir="${cobertura.dir}">
            
<include name="cobertura.jar" />
            
<include name="lib/**/*.jar" />
        
</fileset>
    
</path>
    
<delete file="cobertura.ser" />
    
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />

要使用我們必須對我們所需要測試的class文件打上標籤

    <target name="instrument">
        
<cobertura-instrument todir="WebRoot/WEB-INF/instrumented-classes">
            
<fileset dir="WebRoot/WEB-INF/classes">
                
<include name="**/*.class" />
            
</fileset>
        
</cobertura-instrument>
    
</target>

標籤打好了,接下來就是測試了,這裏有一點很重要,就是打上標籤的class必須在被測試的class之前出現.

<target name="cover-test" depends="instrument">
        
<mkdir dir="${junit.output.dir}/cover-test" />
        
<junit fork="yes" printsummary="withOutAndErr">
            
<formatter type="xml" />
            
<classpath>
                
<fileset dir="D:/developTools/cobertura-1.9/lib">
                    
<include name="**/*.jar" />
                
</fileset>
            
</classpath>
            
<classpath refid="cobertura.classpath" />
            
<classpath location="D:/developTools/cobertura-1.9/cobertura.jar" />
            
<classpath location="WebRoot/WEB-INF/instrumented-classes" />
            
<classpath>
                
<pathelement path="WebRoot/WEB-INF/classes" />
            
</classpath>
            
<classpath refid="test.classpath" />
            
<batchtest fork="yes" todir="${junit.output.dir}">
                
<fileset dir="test">
                    
<include name="**/*Test*.java" />
                    
<exclude name="**/AllTests.java" />
                
</fileset>
            
</batchtest>
        
</junit>
    
</target>

ok測試也有了,現在該是產生測試報告的時候了

    <target name="coverage-report" depends="cover-test">
        
<cobertura-report destdir="cobertura">
            
<fileset dir="src">
                
<include name="**/*.java" />
            
</fileset>
            
<fileset dir="test">
                
<include name="**/*.java" />
            
</fileset>
        
</cobertura-report>
    
</target>

好了,到這裏爲止我們的build文件已經可以產生測試覆蓋率報告了,讓我們運行看看結果吧.

 

 

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章