單元測試覆蓋率工具JaCoCo的使用介紹

JaCoCo是基於ANT的單元測試覆蓋率報告自動生成工具,它可用來針對整個專案的單元測試用例生成覆蓋率報告。

JaCoCo的下載

頁面下載最新版本的JaCoCo壓縮包,解壓縮後找到Lib資料夾下的jacocoant.jar文件備用。

JaCoCo工具是與ANT工具結合使用,用來完成自動化單元測試的覆蓋率報告生成工作。在ANT的腳本裡設置步驟如下所示:

1.        在根節點裡添加屬性 basedir=”.” 和xmlns:jacoco="antlib:org.jacoco.ant",示例如下:

<projectbasedir="." default="build"name="alertmanager"xmlns:jacoco="antlib:org.jacoco.ant">

2.        創建單元測試覆蓋率報告生成目錄,示例如下:

<propertyname="result.dir" value="${basedir}/result"/>

<propertyname="result.class.dir" value="${result.dir}/classes"/>

<propertyname="result.data.dir" value="${result.dir}/data"/>

<propertyname="result.jacoco.dir" value="${result.dir}/jacoco"/>

<propertyname="result.jacoco.report.dir"value="${result.jacoco.dir}/report" />

3.        創建對jacocoant.jar引用的taskdef節點,示例如下:

<taskdefuri="antlib:org.jacoco.ant"resource="org/jacoco/ant/antlib.xml">

      <classpath path="${basedir}/lib/jacocoant.jar" />

</taskdef>

4.        在項目的classpath節點中創建對jacocoant.jar引用的classpath項,示例如下:

<pathelementlocation="${basedir}/lib/jacocoant.jar"/>

5.        在初始化任務中創建單元測試覆蓋率報告生成的目標目錄,示例如下:

   <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}"/>

      …

   </target>

單元測試運行部分

建立一個新的ANT任務,該任務是運行專案中所有的單元測試並收集相關資料,示例及其相關注解如下。

<targetname="rununittest"depends="ambuild">       ------1

      <jacoco:coverage>

          <junit fork="true" printsummary="true">

             <batchtest todir="${result.data.dir}">------2

                 <fileset dir="${result.class.dir}">

                    <include name="**/*Test.class"/>

                    <exclude name="**/*DispatchTest.class"/>

                 </fileset>

             </batchtest>

             <formatter type="brief" usefile="false"/>------3

             <formatter type="xml"/>

             <formatter type="plain"/>

             <classpathrefid="alertmanager.classpath"/>            

          </junit>

      </jacoco:coverage>

</target>

1. 該項任務依賴於所在專案的BUILD任務,即在運行此任務前需要保證該專案已成功編譯。示例中depends=”ambuild”,ambuild任務即為該項目的編譯任務。

2. JaCoCo是基於JUnit的,所以在jacoco標籤包含了junit標籤;<batchtest>標籤將使用者關心的單元測試class檔包含進來。

3. 本部分是對單元測試覆蓋率報告資料格式的設置及單元測試成功運行所需的classpath的設置。

單元測試覆蓋統治報告生成部分

建立一個新的ANT任務,該任務是用來根據單元測試運行部分一節的結果生成單元測試覆蓋統治報告,示例及其相關注釋如下。

<targetname="coveragereport" description="Generatereport byJacoco" depends="rununittest">

      <jacoco:report>

          <executiondata>------1

             <file file="${basedir}/jacoco.exec"/>

          </executiondata>

          <!--the class files and optional source files ... -->

          <structure name="Coveragereport of Alert Manager."> ------2

             <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="GeneratedBy PartySchool."destdir="${result.jacoco.report.dir}" />  ------3

          <csv destfile="${result.jacoco.report.dir}/report.csv" />

          <xml destfile="${result.jacoco.report.dir}/report.xml" />

      </jacoco:report>

</target>

1.      指定生成單元測試覆蓋率報告所必須的檔,該檔由首次運行該ANT任務時,自動生成,用戶不必關心它。

2.      該部分是將使用者關心的單元測試的class檔及專案原始檔案添加進來。

3.      該部分是設置單元測試覆蓋率報告的格式。

單元測試覆蓋率報告結果示例如圖一所示:

 


圖一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值