欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[开源]JaCoco [转载]

程序员文章站 2022-06-02 20:41:49
...

From: http://blog.csdn.net/jungle0127/article/details/7302120

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.      該部分是設置單元測試覆蓋率報告的格式。

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

相关标签: 开源软件 JaCoco