Jacoco--測試覆蓋率工具

介紹

JaCoCo(Java Code Coverage)是一種分析單元測試覆蓋率的工具,使用它運行單元測試后,可以給出代碼中哪些部分被單元測試測到,哪些部分沒有沒測到,并且給出整個項目的單元測試覆蓋情況百分比,看上去一目了然。

JaCoCo會生成以下指標的度量:

Instructions (C0 Coverage)

  • 主要是計算字節碼文件的覆蓋率。

Branches (C1 Coverage)

  • JaCoCo也計算分支覆蓋所有if和 switch語句。主要是計算分支的。
  • 沒有覆蓋:在該行沒有分支機構已執行(紅鉆)
  • 部分覆蓋:只有在該行分支機構的一部分已經被執行(黃鉆)
  • 全覆蓋:在該行各分支機構已執行(綠鉆)

Cyclomatic Complexity

  • 圈復雜度(Cyclomatic Complexity)是一種代碼復雜度的衡量標準。它可以用來衡量一個模塊判定結構的復雜程度,數量上表現為獨立現行路徑條數,也可理解為覆蓋所有的可能情況最少使用的測試用例數。圈復雜度大說明程序代碼的判斷邏輯復雜,可能質量低且難于測試和維護。程序的可能錯誤和高的圈復雜度有著很大關系。請注意,JaCoCo不考慮異常處理的分支機構try-catch塊也不會增加復雜性。總體和分支正相關。實際上,過去幾年的各種研究已經確定:一個方法的圈復雜度(或 CC)大于 10 的方法存在很大的出錯風險。
  • 關于圈復雜度的理解,可以看以下鏈接。

Lines

  • 主要計算基于覆蓋的實際源代碼行類和源文件行覆蓋。通常會標識三種狀態。
  • 沒有覆蓋:在該行任何指令執行(紅色背景)
  • 部分覆蓋:只有在該行的指示的一部分已經被執行(黃色背景)
  • 全覆蓋:在該行的所有指令已執行(綠色背景)

Methods

  • 每個非抽象方法包含至少一個指令。構造函數和靜態初始化都算作方法。

單元測試

Eclipse 插件 EclEmma

EclEmma的安裝

1.啟動eclipse,點擊Help菜單,Install New Software,在彈出的對話框中,點擊Add

2. 輸入Name,例如EclEmma。輸入Location:update.eclemma.org/

3. 在Work With處選擇剛剛輸入的Location地址

4. 安裝后重新啟動eclipse,如果成功安裝,工具欄上會出現一個新的按鈕

EclEmma的使用

1.編寫單元測試用例。現在支持以下測試:

  • Local Java application
  • Eclipse/RCP application
  • Equinox OSGi framework
  • JUnit test
  • TestNG test
  • JUnit plug-in test
  • JUnit RAP test
  • SWTBot test
  • Scala application

2.以JUnit為例,在測試用例文件上右鍵,選擇 Coverage As -> JUnit Test

3. 會在測試的文件中顯示出運行結果:

  • 綠色:完整執行?
  • 紅色:沒執行?
  • 黃色:部分執行

4.通過點擊調出Coverage窗口,它是用來統計程序的覆蓋測試率

5. 點擊紅色矩形框的按鈕能將多次測試的覆蓋數據綜合起來進行查看

6. 在Coverage視圖主區域中點擊右鍵,出現的快捷菜單中選擇”Export Report…”

7.出現Export界面,選項如下:

  • Available sessions:要導出的session?
  • Format:選擇報告的類型(HTML/XML/Text/EMMA session)?
  • Destination:導出的session 存放的位置

IDEA插件

IDEA自帶Jacoco單元測試分析工具,操作步驟如下。
1.選擇編輯配置 “Edit Configurations”。


2.添加單元測試類型,選擇被測文件,此處以TestNG為例,測試所有代碼(不包含lib)。


3.選擇工具jacoco。


4.以覆蓋率模式運行測試用例。


5.運行完成后自動生成測試報告。


MAVEN

在pom.xml文件中添加以下插件后,運行 mvn test 即可在target/site/jacoco文件夾下生成報告。

如果想要跳過失敗的測試用例,請使用 mvn test -Dmaven.test.failure.ignore=true

<plugin>    <groupId>org.jacoco</groupId>    <artifactId>jacoco-maven-plugin</artifactId>    <version>0.8.2-SNAPSHOT</version>    <executions>        <execution>            <id>default-prepare-agent</id>            <goals>                <goal>prepare-agent</goal>            </goals>        </execution>        <execution>            <id>default-report</id>            <phase>test</phase>            <goals>                <goal>report</goal>            </goals>        </execution>        <execution>            <id>default-check</id>            <goals>                <goal>check</goal>            </goals>        </execution>    </executions></plugin>復制代碼

運行時測試

jacoco支持程序運行中監控執行情況。下面介紹直接運行和tomcat服務器運行兩種監控方式。

準備

在jacoco官方下載jacoco包,下載連接:www.jacoco.org/jacoco/

下載的包中包括三個jar,此處使用 jacocoagent.jar 和 jacococli.jar

直接運行

1.假如直接運行的是test.jar, 運行以下命令:

java -javaagent:jacoco\jacocoagent.jar=includes=* -jar test.jar

其中下劃線處指明準備中的jar包,后面為參數。

相關參數請參考:www.jacoco.org/jacoco/trun…

2.待程序運行結束后,會在test.jar同級目錄生成jacoco.exec文件,此文件為jacoco獲取的運行情況文件。

3.獲取需要分析的class文件,假設test.jar中的源代碼生成的文件位于com文件夾中,將此文件夾放入和jacoco.exec同一文件夾下。

4.執行命令即可生成報告:

java -jar jacoco\jacococli.jar report jacoco.exec --classfiles com --html report

下劃線處為準備中的jar包,report表明生成報告, jacoco.exec為運行監控文件,–classfiles為生成報告正對的class文件,–html為報告格式,report為報告文件夾。(此處的class文件應當和運行中相同)

詳細參數請參考:www.jacoco.org/jacoco/trun…

tomcat運行

tomcat運行與直至運行的方式基本相同,唯一不同的是指明jacocoagent.jar的方式。

在Windows下,在$TOMCAT_HOME/bin/catalina.bat,Linux下,在$TOMCAT_HOME/bin/catalina.sh的前面,增加如下設置:

set "JAVA_OPTS=-javaagent:=jacoco\jacocoagent.jar=includes=*"

如果在參數中未未指明exec文件的生成路徑,那么會在$TOMCAT_HOME/bin文件夾下生成,其余操作與上述相同。



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253752.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML 標記大全參考手冊

1.文件結構 文件類型 <HTML></HTML> &#xff08;放在文檔的開頭與結尾&#xff09; 文件主題 <TITLE></TITLE> &#xff08;必須放在「文頭」區塊內&#xff09; 文頭 <HEAD></HEAD> &#xff08;描述性資料&#xff0c;如「主題」&#…

APB協議學習

APB(Advanced Peripheral Bus) 1、APB的概述與特點 APB主要用于低帶寬的周邊外設之間的連接&#xff0c;例如UART、1284等&#xff0c;它的總線架構不像AHB支持多個主模塊&#xff0c;在APB里面唯一的主模塊就是APB 橋。其特性包括&#xff1a;兩個時鐘周期傳輸&#xff1b;無…

私有協議棧開發

通信協議從廣義上區分&#xff0c;可以分為公有協議和私有協議。由于私有協議的靈活性&#xff0c;它往往會在某個公司或者組織內部使用&#xff0c;按需定制&#xff0c;也因為如此&#xff0c;升級起來會非常方便&#xff0c;靈活性好。絕大多數的私有協議傳輸層都基于TCP/IP…

制作NFS

最近學習NFS&#xff0c;用本地測試. 以下是我的測試過程 環境 ubuntu 10.4 vm 7.1 終端 ifconfig 得到 ubuntu資料 INET ADDR 192.168.0.4 BCAST 192.168.0.255 MASK 255.255.255.0 一 安裝NFS $ sudo apt-get install nfs-kernel-server $ sudo apt-get install nfs…

【筆記篇】C#筆記2

返回目錄&#xff1a;目錄請戳這里~ C#數組 基本概念不提。。int[] a; bool[] b new bool[10]; float[] c {0.5, 57.0, 233.3, 12345.67 }; double[] d new double[/*3*/]{233.33, 1926.0817, 4396.0 }; 然后數組和指針有很大的不同。。。 Array類不會用…… 有多維數組和…

SFB 項目經驗-51-某上市企業2千人Exchange 2013升級2016高可用之傷01

SFB 項目經驗-51-某上市企業2千人Exchange 2013升級2016高可用之傷01&#xff08;帶病撰寫項目實戰筆記&#xff09;問題描述&#xff1a;2000人企業使用Exchange 2013郵件服務器標準版&#xff0c;n年!1&#xff09;問題1&#xff1a;標準版僅支持5個郵箱數據庫。2&#xff09…

數字圖像處理——2D降噪

圖像降噪處理主要分為2D&#xff08;空域&#xff09;與3D降噪&#xff08;時域/多幀&#xff09;&#xff0c;而2D降噪由于相關的實現算法豐富&#xff0c;效果各異&#xff0c;有著豐富的研究價值。理解2D降噪算法的流程&#xff0c;也對其他的增強算法有很大的幫助&#xff…

項目開發(Require + E.js)

最近在做的幾個項目&#xff0c;分別用了不同的框架跟方式&#xff0c;有個H5的項目&#xff0c;用了vue框架&#xff0c; 這個項目我還沒有正式加入進去&#xff0c; 等手頭的這個項目完成就可以去搞vue了&#xff0c; 現在手頭的這個項目是一個招聘的項目&#xff0c; 用到了…

五個常用的Linux監控腳本代碼

bash中 2>&1 & 的解釋 1、首先&#xff0c;bash中0&#xff0c;1&#xff0c;2三個數字分別代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO&#xff0c;即標準輸入&#xff08;一般是鍵盤&#xff09;&#xff0c;標準輸出&#xff08;一般是顯示屏&#xff0c;準…

AHB協議學習

1. 簡介 AHB(Advanced High Performance Bus)總線規范是AMBA(Advanced Microcontroller Bus Architecture) V2.0總線規范的一部分&#xff0c;AMBA總線規范是ARM公司提出的總線規范&#xff0c;被大多數SoC設計采用&#xff0c;它規定了AHB (Advanced High-performance Bus)、A…

jquery lazy load

LazyLoad是一個Js編寫的Jq插件,它可以延遲加載頁面中的圖片,在瀏覽器可視范圍中的圖片會被加載。如何使用&#xff1a;LazyLoad依賴于Jquery&#xff0c;在html的結尾處 ,就是在</body>前。<script type"text/javascript" src"jquery.js"><…

linux內核中的循環緩沖區

Linux內核中的循環緩沖區&#xff08;circular buffer&#xff09;為解決某些特殊情況下的競爭問題提供了一種免鎖的方法。這種特殊的情況就是當生產者和消費者都只有一個&#xff0c;而在其它情況下使用它也是必須要加鎖的。 循環緩沖區定義在include/linux/kfifo.h中&#xf…

js的規范寫法ES5(自己以后按照這樣寫)

1、引號的使用&#xff0c;單引號 優先&#xff08;如果不是引號嵌套&#xff0c;不要使用雙引號&#xff09; 正常情況&#xff1a;console.log(hello there) 雙引號轉碼&#xff1a; $("<div classbox>") 2、空格的使用問題&#xff1a;&#xff08…

刪除本地git的遠程分支和遠程刪除git服務器的分支

在項目中使用git管理代碼后&#xff0c;有些時候會創建很多不同名稱的分支&#xff0c;以此區分各個分支代碼功能。 而隨著代碼的合并&#xff0c;以前的分支就可能不再需要保存了&#xff0c;所以就要對沒有用的分支進行刪除&#xff0c;包括緊急回滾時從中抽取某一個版本記錄…

數字圖像處理——引導濾波

一、概述 引導濾波是由何愷明等人于2010年發表在ECCV的文章《Guided Image Filtering》中提出的&#xff0c;后續于2013年發表。引導過濾器根據局部線性模型原理&#xff0c;通過考慮引導圖像的內容來計算過濾輸出&#xff0c;引導圖像可以是輸入圖像本身或另一個不同的圖像。具…

Ubuntu 18.04換國內源

2019獨角獸企業重金招聘Python工程師標準>>> 參考文檔&#xff1a; https://blog.csdn.net/zhangjiahao14/article/details/80554616 https://blog.csdn.net/xiangxianghehe/article/details/80112149 1.復制源文件備份&#xff0c;以防萬一 我們要修改的文件是sour…

video4linux簡介

Video4linux&#xff08;簡稱V4L),是linux中關于視頻設備的內核驅動,現在已有Video4linux2&#xff0c;還未加入linux內核&#xff0c;使用需自己下載補丁。在Linux中&#xff0c;視頻設備是設備文件&#xff0c;可以像訪問普通文件一樣對其進行讀寫&#xff0c;攝像頭在/dev/v…

動態DPC算法學習

造成壞點的原因 感光元件芯片自身工藝技術瑕疵造成;光線采集存在缺陷;制造商產品差異;壞點分類 hot pixel: 固定保持較高的像素值,一般呈現為畫面高亮的點;dead pixel: 固定保持較低的像素值,一般在畫面中呈現為暗點;noise pixel:信號強度隨光照呈現的變化規律不符合正…

windows 郵槽mailslot 在服務程序內建立后客戶端無權限訪問(GetLastError() == 5)的問題...

郵槽創建在服務程序內&#xff0c;可以創建成功&#xff0c; 但外部客戶端連接時 m_hMailslot CreateFile("\\\\.\\mailslot\\zdpMailslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);GetLastError返回錯誤 5 &#xff0c;無權…

遞歸下降分析

對于給定的文法G[E] : E→ET|E-T|TT→T*F| T/F|FF→(E)|i 消除左遞歸后的文法是&#xff1a;E→TE E→TE|-TE|∑ T→FT T→*FT|/FT|∑ F→(E)|i 是否是LL(1)文法&#xff1f; select(E→TE)first(TE){(,i}select(E→TE)first(TE){}select(E→-TE)first(-TE){-}select(E→∑)fol…