.NET Github Actions 測試覆蓋率

来源:https://www.cnblogs.com/stulzq/archive/2023/03/08/17196222.html
-Advertisement-
Play Games

如果熟悉 GIthub 我們經常可以在一些開源項目的 PR 上看到會配置測試的驗證以及覆蓋率的報告,並且可以強制覆蓋率不低於設定的值才可以進行 Merge PR。 1.測試 創建一個 xUnit 單元測試項目。 Class /// <summary> /// Represents a class w ...


如果熟悉 GIthub 我們經常可以在一些開源項目的 PR 上看到會配置測試的驗證以及覆蓋率的報告,並且可以強制覆蓋率不低於設定的值才可以進行 Merge PR。

image-20230307010420028

1.測試

創建一個 xUnit 單元測試項目。

Class

/// <summary>
/// Represents a class with methods to perform addition and subtraction operations.
/// </summary>
public class MyClass
{
    /// <summary>
    /// Adds two integers and returns the result.
    /// </summary>
    /// <param name="a">The first integer to add.</param>
    /// <param name="b">The second integer to add.</param>
    /// <returns>The sum of the two integers.</returns>
    public int Add(int a, int b)
    {
        return a + b;
    }

    /// <summary>
    /// Subtracts one integer from another and returns the result.
    /// </summary>
    /// <param name="a">The integer to subtract from (the minuend).</param>
    /// <param name="b">The integer to subtract (the subtrahend).</param>
    /// <returns>The difference between the two integers.</returns>
    public int Subtract(int a, int b)
    {
        return a - b;
    }
}

Tests:

public class MyClassTests
{
    [Fact]
    public void TestAdd()
    {
        // Arrange
        MyClass myClass = new MyClass();

        // Act
        int result = myClass.Add(2, 3);

        // Assert
        Assert.Equal(5, result);
    }

    [Fact]
    public void TestSubtract()
    {
        // Arrange
        MyClass myClass = new MyClass();

        // Act
        int result = myClass.Subtract(3, 2);

        // Assert
        Assert.Equal(1, result);
    }
}

2.使用 Codecov

2.1 註冊

直接訪問 https://codecov.io ,使用 GIthub 賬號登錄,授權後它會自動獲取你賬號/組織下的倉庫。

image-20230307010650280

2.2 設置

找到需要設置的倉庫,點擊 setup repo,便會出現對應的配置教程。

image-20230307010815288

image-20230307010931161

設置 Token

為了安全,我們不能在 yaml 直接配置我們的 token,需要在 Github 倉庫的 Secrets 設置。

image-20230307011157563

配置 codecov

點擊第二步的鏈接,配置 codecov app

image-20230307011418317

重新配置可以在 Installed GitHub Apps 找到

image-20230307011524934

配置 workflow

添加 step:

- name: Test
  run: dotnet test  /p:CollectCoverage=true /p:CoverletOutputFormat=opencover

- name: Upload coverage reports to Codecov
  uses: codecov/codecov-action@v3
  with:
    token: ${{ secrets.CODECOV_TOKEN }}
    fail_ci_if_error: true
    paths: ./**/coverage.opencover.xml

配置 Status check

在項目根目錄添加 codecov.yml

coverage:
  # Commit status https://docs.codecov.io/docs/commit-status are used
  # to block PR based on coverage threshold.
  status:
    project:
      default:
        target: auto
        threshold: 0%
    patch:
      default:
        informational: true

該配置要求 PR 的測試覆蓋率減少<=0,不然就會提示錯誤:

image-20230308201618333

image-20230308201634831

更多設置可以查看官方文檔:Status Checks (codecov.com)

關於 Patch

在上面的圖中可以看到有個 patch,他可以顯示出我們新增或者修改的代碼,那些沒有被測試覆蓋。

image-20230308201928117

新增了兩個方法,並沒有編寫對應的測試,就會被檢測到並且提示出來。

3.分支保護

Github 提供了分支保護規則的設置:Settings->Branches

image-20230308202104636

通過這個設置,可以限制 main 分支不允許直接 commit,必須經過多少人 Review 才能 Merge,必須通過指定的 Actions 後才能 Merge 等等。可以用來配合覆蓋率檢測,提升項目的質量管控。

4.總結

在本文中,我們介紹瞭如何使用 Github Actions 和 Codecov 這兩個工具來進行 .NET 項目的質量管控。通過在代碼倉庫中添加 Codecov 的 Action,我們可以自動化地收集測試覆蓋率和代碼質量等關鍵指標,並將其報告到 Codecov 的平臺上,以便於團隊更好地跟蹤和管理項目的質量狀況。

當然,Github Actions 和 Codecov 只是質量管控的一部分,要想確保項目的質量,還需要結合其他的質量控制措施,例如代碼審查、單元測試、自動化測試等等。只有通過多個層面的質量控制,才能保證項目的可維護性和穩定性。

以上總結 by ChatGPT

示例:https://github.com/stulzq/DotNetActionsExample

目前學習.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介 在現實世界中,我們常常需要等待其它任務完成,才能繼續執行下一步。Java實現等待子線程完成再繼續執行的方式很多。我們來一一查看一下。 Thread的join方法 該方法是Thread提供的方法,調用join()時,會阻塞主線程,等該Thread完成才會繼續執行,代碼如下: private st ...
  • 說起開源CMS,你會想到哪些呢?WordPress?DoraCMS?joomla? 今天再給大家推薦一個非常好用的開源CMS:Wagtail 如果您正在選型的話,可以瞭解一下Wagtail的特點: 基於Django構建,具有出色的文檔管理功能和友好的用戶界面。 提供了一個靈活且易於使用的頁面編輯器, ...
  • 學習網頁設計和網路編程可能是一種有趣而有意義的體驗,但需要時間,精力和練習.這裡有一些技巧可以幫助您更輕鬆地學習這些技能: 從基礎知識開始:在您深入研究高級主題之前,重要的是要有牢固的理解很重要基礎知識.首先學習HTML,CSS和JavaScript,這是網路的基礎語言. 使用線上資源:線上資源有許 ...
  • 概述 鎖是電腦協調多個進程或線程併發訪問某一資源的機制。在資料庫中,除傳統的計算資源(CPU、RAM、I/O)的爭用以外,數據也是一種供許多用戶共用的資源。如何保證數據併發訪問的一致性、有效性是所有資料庫必須解決的一個問題,鎖衝突也是影響資料庫併發訪問性能的一個重要因素。從這個角度來說,鎖對資料庫 ...
  • Java編程語言是由Sun微系統公司在20世紀90年代早期開發的。儘管Java主要用於基於internet的應用程式,但它是一種簡單、高效、通用的語言。Java最初是為運行在多個平臺上的嵌入式網路應用程式而設計的。它是一種可移植的、面向對象的解釋性語言。 Java是非常可移植的。相同的Java應用程 ...
  • VB.NET語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入VB.NET語言代碼,點擊運行,可線上編譯運行VB.NET語言,VB.NET語言代碼線上運行調試,VB.NET語言線上編譯,可快速線上測試您的VB.NET語言代碼,線上編譯VB.NET語言代碼發現是否存在錯誤,如果代碼測試通過,將會 ...
  • 控制語句:程式預設是順序執行,但在實際項目中需要選擇、迴圈。 1 選擇控制語句if 1.1 if語句的形式 1 if(條件表達式) 2 {//複合語句,若幹條語句的集合 3 語句一; 4 語句二; 5 } 註意:如果條件成立執行大括弧里的所有語句,不成立的話大括弧里的語句都不執行。 if(條件表達式 ...
  • 導出word,以下為導出單個和zip的兩種格式。 CountDownLatch運用 CountDownLatch和ExecutorService 線程池cachedThreadPool.submit 1、CountDownLatch 概念 CountDownLatch可以使一個獲多個線程等待其他線程 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...