用 Cobertura 測量程式碼測試覆蓋率
阿新 • • 發佈:2019-02-01
Cobertura是一個基於jcoverage的免費Java工具,它能夠顯示哪一部分程式碼被你的測試所覆蓋,並可生成HTML或XML報告.
cobertura 的大概基本工作思路:
1.對已經編譯好的class 檔案新增標記
2. 對新增好標記的程式碼進行單元測試
3. 輸出覆蓋率統計報告
在ant 中使用cobertura 的基本步驟:
1. 編譯程式碼
2. 定義cobertura 的ant task
3. 用nstrument 命令為編譯好的程式碼新增標記
4. 用junit 命令對新增好標記的程式碼進行單元測試
5. 用cobertura-report 命令輸出報告
編譯程式碼:
<target name="compile"> <ant antfile="build.xml" inheritAll="false" target="compile"/> </target>
在 build.xml 檔案中新增一個任務定義:
<path id="cobertura.classpath"> <fileset dir="${lib.dir}"> <include name="cobertura/*.jar"/> </fileset> <pathelement location="${cobertura.instrumented.classes.dir}"/> </path> <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
新增一個instrument
任務,該任務將在已經編譯好的類檔案中新增標記。todir
屬性指定將測量類放到什麼地方。fileset
子元素指定測量哪些 .class檔案:
<target name="instrument" depends="compile"> <cobertura-instrument todir="${cobertura.instrumented.classes.dir}"> <fileset dir="${build.src.dir}"> <include name="**/*.class"/> <exclude name="**/web/**/*.class"/> <exclude name="**/constant/*.class"/> <exclude name="**/*Test.class"/> </fileset> </cobertura-instrument> </target>
可以排除一些不需要檢查的class檔案。
執行測試:
<target name="cover-test" depends="instrument"> <mkdir dir="${cobertura.report.dir}"/> <junit fork="true" failureproperty="unit.tests.failed" printsummary="true" showoutput="yes"> <classpath> <!-- Note the classpath order: instrumented classes are before the original (uninstrumented) classes. This is important. --> <path refid="cobertura.classpath"/> <path refid="test.classpath"/> </classpath> <formatter type="xml"/> <batchtest todir="${cobertura.report.dir}"> <fileset dir="${build.unittest.dir}"> <include name="**/*Test.class"/> </fileset> <fileset dir="${build.functionaltest.dir}"> <include name="**/*Test.class"/> </fileset> <fileset dir="${build.integrationtest.dir}"> <include name="**/*Test.class"/> </fileset> </batchtest> </junit> </target>
最後,生成測試測量報告:
<target name="coverage-report" depends="cover-test"> <cobertura-report format="html" destdir="${cobertura.report.dir}" srcdir="${src.dir}"/> </target>
生成的報告形式大概如下: