統一生成單元測試報告及其覆蓋率報告

来源:互联网 发布:月薪4000 知乎 编辑:程序博客网 时间:2024/06/01 08:33

Junit及JaCoco都是基於ANT工具的,而在ANT的配置腳本中一般而言要兩次運行全部的單元測試用例來分別生成Junit的單元測試報告和JaCoCo的單元測試覆蓋率報告,本案例将以一簡例的单元测试覆盖率配置为例阐述應用Junit工具与JaCoCo工具統一生成單元測試報告及單元測試覆蓋統治報告。
JaCoCo是基于ANT的单元测试覆盖率报告自动生成工具,它可用来针对整个项目的单元测试用例生成覆盖率报告;而JaCoCo生成的生成的單元測試覆蓋率報告只能顯示當前項目中的單元測試對項目源碼的覆蓋而不能很好顯示哪些單元測試用例的運行結果是成功或失敗的,Junit生成的單元測試報告很好的的補充了JaCoCo生成的單元測試覆蓋率報告的這一缺陷。
<property name="result.dir" value="${basedir}/result"/>
<property name="result.class.dir" value="${result.dir}/classes"/>
<property name="result.data.dir" value="${result.dir}/data"/>
<property name="result.junit.dir" value="${result.dir}/junit"/>
<property name="result.junit.report.dir" value="${result.junit.dir}/report"/>
<property name="result.jacoco.dir" value="${result.dir}/jacoco"/>
<property name="result.jacoco.report.dir" value="${result.jacoco.dir}/report" />
--------------------------------------------------------------
設定單元測試報告所需的目錄屬性。
--------------------------------------------------------------
    <target name="init">
     <mkdir dir="${result.dir}"/>
     <mkdir dir="${result.data.dir}"/>
     <mkdir dir="${result.class.dir}"/>
     <mkdir dir="${result.jacoco.dir}"/>
     <mkdir dir="${result.jacoco.report.dir}"/>
     <mkdir dir="${result.junit.dir}"/>
     <mkdir dir="${result.junit.report.dir}"/>
......
    </target>


--------------------------------------------------------------
初始任務創建單元測試報告所需的目錄。
--------------------------------------------------------------
<target name="ambuild" description="Build for get unit test report and code coverage report." depends="init">
<javac debug="true" debuglevel="${debuglevel}" destdir="${result.class.dir}" source="${source}" target="${target}">
  <src path="src"/>
  <classpath refid="alertmanager.classpath"/>
</javac>
<javac debug="true" debuglevel="${debuglevel}" destdir="${result.class.dir}" source="${source}" target="${target}">
  <src path="test"/>
  <classpath refid="alertmanager.classpath"/>
</javac>
</target>
--------------------------------------------------------------
ambuild任務,是Eclipse自動生成的,用來編譯整個項目。
--------------------------------------------------------------
<target name="rununittest" depends="ambuild">
<jacoco:coverage>
<junit fork="true" printsummary="true">
<batchtest todir="${result.data.dir}">
<fileset dir="${result.class.dir}">
<include name="**/*Test.class"/>
<exclude name="**/*DispatchTest.class"/>
</fileset>
</batchtest>
<formatter type="brief" usefile="false"/>
<formatter type="xml"/>
<formatter type="plain"/> 
<classpath refid="alertmanager.classpath"/>
</junit>
</jacoco:coverage> 
<junitreport todir="${result.data.dir}">
<fileset dir="${result.data.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${result.junit.report.dir}">
<param name="TITLE" expression="Unit test of AlertManager."/>
</report>

</junitreport>
</target>
--------------------------------------------------------------
rununittest任務是用來生成單元測試覆蓋率報告數據及單元測試報告。
--------------------------------------------------------------
<target name="coveragereport" description="Generate report by Jacoco" depends="rununittest">
<jacoco:report>
<executiondata>
<file file="${basedir}/jacoco.exec"/>
</executiondata>
<!-- the class files and optional source files ... --> 
<structure name="Coverage report of Alert Manager."> 
<classfiles> 
<fileset dir="${result.class.dir}">
<exclude name="**/*Test.class"/>
</fileset>
</classfiles> 
   <sourcefiles encoding="UTF-8"> 
<fileset dir="${basedir}/src" >
<exclude name="**/*Exception.java"/>
<exclude name="**/*ExportData*.jar"/>
<exclude name="**/*DispatchTest.java"/>
<exclude name="**/*Sender.java"/>
</fileset>
</sourcefiles> 
</structure> 
 
<!-- to produce reports in different formats. --> 
<html footer="Generated By PartySchool." destdir="${result.jacoco.report.dir}" /> 
<csv destfile="${result.jacoco.report.dir}/report.csv" /> 
<xml destfile="${result.jacoco.report.dir}/report.xml" /> 
</jacoco:report>
</target>

<target name="report" depends="clean,coveragereport"/>
--------------------------------------------------------------
生成單元測試覆蓋率報告。
--------------------------------------------------------------