JaCoCo 是什么

JaCoCo(Java Code Coverage)是一款廣泛使用的 Java 代碼覆蓋率工具,用于分析測試用例對項目代碼的覆蓋程度,幫助開發者識別未被測試的代碼區域,從而提升軟件質量。它通常與 JUnitTestNG 等測試框架及 MavenGradle 等構建工具集成,是 DevOps 流程中的重要組成部分。


JaCoCo 的核心功能

  1. 覆蓋率統計

    • 行覆蓋率:測試是否覆蓋了代碼的每一行。
    • 分支覆蓋率:是否覆蓋了所有條件分支(如 if-else)。
    • 方法覆蓋率:是否調用了每個方法。
    • 類覆蓋率:是否測試了所有類。
  2. 多種輸出報告

    • HTML:可視化展示覆蓋率詳情(按包、類、方法逐級下鉆)。
    • XML/CSV:便于集成到 CI/CD 工具(如 Jenkins、SonarQube)。
  3. 實時監控

    • 在單元測試或集成測試運行時動態收集覆蓋率數據。
  4. 與構建工具無縫集成

    • 支持 MavenGradleAnt,通過簡單配置即可啟用。

JaCoCo 的工作原理

  1. 字節碼插樁
    • JaCoCo 在編譯時或運行時向 Java 字節碼插入探針(Probes),記錄代碼執行情況。
  2. 數據收集
    • 測試運行時,探針記錄哪些代碼被執行。
  3. 報告生成
    • 測試完成后,生成覆蓋率報告(如 index.html)。

快速開始(Maven 項目示例)

1. 配置 Maven 插件

pom.xml 中添加 JaCoCo 插件:

<plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.8</version><executions><execution><goals><goal>prepare-agent</goal> <!-- 在測試階段插入探針 --></goals></execution><execution><id>generate-report</id><phase>test</phase> <!-- 測試完成后生成報告 --><goals><goal>report</goal></goals></execution></executions>
</plugin>
2. 運行測試并生成報告
mvn clean test  # 運行測試后,報告會生成在 target/site/jacoco/index.html
3. 查看報告

打開 target/site/jacoco/index.html,可以看到如下內容:

  • 摘要頁:總覆蓋率(如 85% 行覆蓋)。
  • 詳情頁:點擊具體類,查看未覆蓋的代碼行(紅色標記)。

JaCoCo 與 CI/CD 集成

  1. Jenkins 集成

    • 安裝 JaCoCo Plugin,在 Pipeline 中配置覆蓋率閾值:
      pipeline {stages {stage('Test') {steps {sh 'mvn test'}}}post {always {jacoco(execPattern: 'target/jacoco.exec',classPattern: 'target/classes',sourcePattern: 'src/main/java')}}
      }
      
  2. SonarQube 集成

    • sonar-project.properties 中指定 JaCoCo 報告路徑:
      sonar.java.coveragePlugin=jacoco
      sonar.jacoco.reportPaths=target/jacoco.exec
      

JaCoCo 的常見配置選項

配置項作用
<includes>只統計指定包/類的覆蓋率(如 com.example.*)。
<excludes>排除特定類(如生成的代碼、測試類)。
<rules>設置覆蓋率閾值,失敗時終止構建(如行覆蓋率必須 ≥80%)。
<outputDirectory>自定義報告輸出目錄。

JaCoCo vs. 其他覆蓋率工具

工具語言特點
JaCoCoJava零配置、輕量級、支持字節碼插樁和離線模式。
CoberturaJava較老舊,需顯式插樁,報告格式較簡單。
EmmaJava已停止維護,僅支持離線插樁。
IstanbulJavaScript用于 Node.js/前端項目(如 Jest 覆蓋率)。

最佳實踐

  1. 設定合理的覆蓋率目標
    • 關鍵模塊(如支付邏輯)要求 90%+,非核心代碼可放寬。
  2. 排除無需測試的代碼
    • 如自動生成的類、DTO、Main 方法:
      <configuration><excludes><exclude>**/dto/*</exclude><exclude>**/Application.java</exclude></excludes>
      </configuration>
      
  3. 結合單元測試和集成測試
    • JaCoCo 可合并多份報告,全面反映測試覆蓋情況。

常見問題

Q:JaCoCo 能測多模塊項目嗎?
A:可以!在父 POM 中配置插件,子模塊會繼承設置,最終合并覆蓋率數據。

Q:如何檢查測試覆蓋率是否達標?
A:通過 Maven 的 check 目標,配置規則:

<execution><id>check-coverage</id><goals><goal>check</goal></goals><configuration><rules><rule><element>CLASS</element><limits><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.8</minimum></limit></limits></rule></rules></configuration>
</execution>

總結:JaCoCo 是 Java 開發者提升代碼質量的利器,通過量化測試覆蓋率,幫助團隊發現測試盲區。結合 CI/CD 和 SonarQube,可實現自動化質量門禁,確保每次提交的代碼均經過充分驗證。

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

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

相關文章

火山引擎扣子系列

您提到的“火山引擎扣子系列”指的應該是 **火山引擎推出的智能AI對話開發與應用平臺——Coze&#xff08;中文名&#xff1a;扣子&#xff09;**。這是一個由字節跳動旗下火山引擎開發的、面向開發者和非技術用戶的**低代碼/無代碼AI Bot開發平臺**&#xff0c;旨在幫助用戶快…

OpenLayers 加載ArcGIS瓦片數據

注&#xff1a;當前使用的是 ol 5.3.0 版本&#xff0c;天地圖使用的key請到天地圖官網申請&#xff0c;并替換為自己的key 隨著GIS應用的不斷發展&#xff0c;Web地圖也越來越豐富&#xff0c;除了像ESRI、超圖、中地數碼這樣GIS廠商有各自的數據源格式&#xff0c;也有Google…

大模型是什么?

大模型&#xff0c;英文名叫Large Model&#xff0c;也被稱為基礎模型&#xff08;Foundation Model&#xff09;。我們通常說的大模型&#xff0c;主要指的是其中最常用的一類——大語言模型&#xff08;Large Language Model&#xff0c;簡稱LLM&#xff09;。除此之外&#…

LLaMaFactory 微調QwenCoder模型

步驟一&#xff1a;準備LLamaFactory環境 首先,讓我們嘗試使用github的方式克隆倉庫: git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git # 創建新環境&#xff0c;指定 Python 版本&#xff08;以 3.…

【位運算】判斷字符是否唯?(easy)

33. 判斷字符是否唯?&#xff08;easy&#xff09; 題?描述&#xff1a;解法&#xff08;位圖的思想&#xff09;&#xff1a;C 算法代碼&#xff1a;Java 算法代碼&#xff1a; 題?鏈接&#xff1a;?試題 01.01. 判定字符是否唯? 題?描述&#xff1a; 實現?個算法&…

滿天星之canvas實現【canvas】

展示 文章目錄 展示Canvas 介紹【基礎】簡介兼容性關鍵特性注意事項應用場景&#xff1a;基本示例 滿天星代碼實現【重點】代碼解釋 全量代碼【來吧&#xff0c;盡情復制吧少年】html引入JS代碼 參考資源 Canvas 介紹【基礎】 簡介 Canvas是一個基于HTML5的繪圖技術&#xff0…

可視化提示詞(Prompt)在訓練過程中的優化過程:visualize_prompt_evolution

可視化提示詞(Prompt)在訓練過程中的優化過程:visualize_prompt_evolution 這個函數 visualize_prompt_evolution 的作用是可視化提示詞(Prompt)在訓練過程中的優化過程,通過對比每個訓練輪次(Epoch)的提示詞與初始提示詞的差異,直觀展示哪些Token被保留、哪些被修改…

2025 一帶一路暨金磚國家技能發展與技術創新大賽 第一屆“信創適配及安全管理賽項”樣題

2025 一帶一路暨金磚國家技能發展與技術創新大賽 第一屆“信創適配及安全管理賽項”樣題 模塊A-理論知識&#xff1a;模塊B-適配環境搭建&#xff1a;系統安裝與配置&#xff1a;DNS 服務配置&#xff1a;DNS 服務配置&#xff1a;CA 服務配置&#xff1a;Httpd 服務配置&#…

Qt Creator調用Python代碼

Qt Creator調用Python代碼 項目場景:現在我寫的Qt上位機,需要調用同事使用python寫的代碼,所以我需要一個整合,把同事的代碼融合進我的Qt工程里來。 所以,本篇記錄Qt Creator中調用Python的一種方法。 操作系統:windows 11 64位 Python使用的版本為 3.9.10,(安裝參…

【QQ音樂】sign簽名| data參數 | AES-GCM加密 | webpack(上)

1.目標 網址&#xff1a;https://y.qq.com/n/ryqq/toplist/26 切換榜單出現請求&#xff0c;可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data)&#xff0c;而n.data就是請求的加密data參數 data {"comm":{"cv":4747474,&qu…

uni-app(6):Vue3語法基礎下

1 列表渲染 1.1 在 v-for 里使用數組 v-for 指令可以實現基于一個數組來渲染一個列表。v-for 指令需要使用 item in items 形式的特殊語法&#xff0c;其中 items 是源數據數組&#xff0c;而 item 則是被迭代的數組元素的別名。 在 v-for 塊中&#xff0c;我們可以訪問所有父…

STM32之SPI——外部FLASH和RFID

一、SPI協議的原理與應用 基本概念 串行外設接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由美國摩托羅拉公司最先推出的一種同步串行傳輸規范&#xff0c;也是一種單片機外設芯片串行外設擴展接口。該接口是一種高速、全雙工、同步的通信總線&#xff0c;并…

51c視覺~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D時空中追蹤萬物&#xff01;國防科大提出首個長時場景流估計方法 本篇分享 TPAMI 2025 論文??SceneTracker: Long-term Scene Flow Estimation Network??&#xff0c;國防科大提出首…

cf2059B

原題鏈接&#xff1a;https://codeforces.com/contest/2059/problem/B 題目背景&#xff1a; 將一個長度為 n 的數組 a 劃分為 k 個數組&#xff0c;再將所有偶數索引的數組合并成 b 數組&#xff0c;定義代價為 的最小索引 i &#xff0c;可得到的最小代價為多少。 思路&am…

爬蟲到智能數據分析:Bright Data × Kimi 智能洞察亞馬遜電商產品銷售潛力

前言 電商數據分析在現代商業中具有重要的戰略價值&#xff0c;通過對消費者行為、銷售趨勢、商品價格、庫存等數據的深入分析&#xff0c;企業能夠獲得對市場動態的精準洞察&#xff0c;優化運營決策&#xff0c;預測市場趨勢、優化廣告投放、提升供應鏈效率&#xff0c;并通…

從解決一個分享圖片生成的歷史bug出發,詳解LayoutInflater和View.post的工作原理

問題背景 最近在項目中遇到一個問題&#xff1a;在檔口分享功能中&#xff0c;需要動態生成一個分享圖片。代碼是這樣寫的&#xff1a; // 項目中的代碼 val shareView LayoutInflater.from(thisStallMainActivityV1).inflate(R.layout.share_header_stall_main_layout, nul…

2.linux目錄切換命令:cd與pwd以及路徑與路徑符

cd 切換當前工作目錄 cd [linux路徑0] cd沒有選項,直接執行,只有參數.如果沒有參數,表示回到用戶的home目錄 pwd 無參,無選項,直接打印當前工作目錄的絕對路徑 路徑 相對路徑 以當前目錄為起點,路徑描述無需使用/開頭 # cd Desktop 絕對路徑 路徑描述需要以/開頭 cd…

摩爾條紋 原理以及matlab 實現

一、簡介 莫爾條紋的形成原理-CSDN博客 “莫爾”一詞源于法文“Moire”&#xff0c;其原本的含義是“波動”或者“起波紋的”。早在古代時期&#xff0c;人們便偶然發現&#xff0c;當把兩塊薄的絲綢織物相互疊加放置時&#xff0c;能夠看到一種呈現不規則形態的花紋。此后&a…

【海康USB相機被HALCON助手連接過后,MVS顯示無法連接故障。】

在Halcon里使用助手調用海康USB相機時&#xff0c;如果這個界面點擊了【是】 那么恭喜你&#xff0c;相機只能被HALCON調用使用&#xff0c;使用MVS或者海康開發庫&#xff0c;將查找不到相機 解決方式&#xff1a; 右鍵桌面【此電腦】圖標 ->選擇【管理】 ->選擇【設備…

數據治理是什么意思?數據治理平臺有哪些?

目錄 一、數據治理的概念 1. 數據治理的定義 2. 數據治理的目標 二、數據治理的實施流程 1. 規劃階段 2. 評估階段 3. 執行階段 4. 監控與評估階段 三、常見的數據治理平臺 1. FineDataLink 2. IBM InfoSphere Information Governance Catalog 四、總結 隨著企業業…