.NET 幫助

C# 單元測試(開發者如何運作)

發佈 2024年4月3日
分享:

C# 單元測試簡介

單元測試 在軟體開發中是一個關鍵階段,有助於開發人員驗證源代碼個別單元的功能。在C#中,單元測試可確保每個組件或方法在各種條件下正常運行。通過隔離程序的每個部分並顯示各個部分無錯誤,單元測試對於應用程序的可靠性有很大幫助。在本文中,我們將探討C#單元測試項目的基本知識和 IronPDF library.

在 Visual Studio 中設置您的第一個單元測試

建立單元測試專案

要在 C# 中開始進行單元測試,您需要在 Visual Studio 中設置一個單元測試專案。Visual Studio 提供了一個內建的單元測試框架,使開始變得簡單明瞭。當您創建新專案時,請選擇 C# 類別下的「單元測試專案」範本。此範本會設定好進行單元測試所需的一切,讓您能高效地運行測試。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            // Arrange
            var calculator = new Calculator();
            // Act
            var result = calculator.Add(2, 2);
            // Assert
            Assert.AreEqual(4, result);
        }
    }
}
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            // Arrange
            var calculator = new Calculator();
            // Act
            var result = calculator.Add(2, 2);
            // Assert
            Assert.AreEqual(4, result);
        }
    }
}
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Namespace Unit_Test_Project_Example
	Public Class Calculator
		Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
			Return a + b
		End Function
	End Class
	<TestClass>
	Public Class CalculatorTests
		<TestMethod>
		Public Sub Add_ShouldReturnCorrectSum()
			' Arrange
			Dim calculator As New Calculator()
			' Act
			Dim result = calculator.Add(2, 2)
			' Assert
			Assert.AreEqual(4, result)
		End Sub
	End Class
End Namespace
VB   C#

理解測試方法和測試類別

在單元測試專案中,您將測試組織成類別和方法。測試類別代表應該一起執行的一組單元測試方法。每個單元測試方法都裝飾著[測試方法]屬性,包含測試特定程式碼功能的邏輯。測試類本身標記為[測試類別]屬性,向測試框架發出訊號,表明它包含要執行的測試。

運行和理解您的測試

使用 Visual Studio 中的測試總管

Visual Studio 的測試總管視窗是您執行和管理所有測試方法的核心中心。您可以執行所有測試、選擇性測試或單個測試。在運行測試後,測試總管會提供通過和失敗測試的詳細摘要,使您能夠快速識別和解決問題。

解讀測試結果

  • 通過的測試: 這些測試順利執行,表明被測試的代碼在指定條件下表現如期望。
  • 失敗的測試: 這些顯示期望結果和實際結果之間存在差異,這表示可能存在程式錯誤或需求或測試代碼的誤解。

及時調查失敗的測試很重要,因為它們可以提供代碼庫中問題的早期警告信號。

C# 單元測試(開發人員的運作方式):圖 1 - 在 Visual Studio 中通过的單元測試範例

進階技術和撰寫 C# 單元測試的最佳實踐

除了撰寫和執行測試以外,要精通 C# 的單元測試還需要了解一些進階技術和最佳實踐。這些方法可以幫助你撰寫更高效和更有效的測試,確保你的應用程式可靠且易於維護。

有效地組織測試

良好的組織對於維護大量測試至關重要。按功能合理地將測試分組。對測試方法和類使用描述性名稱,指示每個測試在驗證什麼。這種方法使得以後在測試套件增長時更容易找到和理解測試。

模擬和依賴注入

通常,您正在測試的代碼會與外部資源或應用程序的其他部分交互。在這種情況下,可以使用像 Moq 或 NSubstitute 這樣的模擬框架來創建模擬對象。這些替代品模仿真實對象的行為,使您能夠單獨測試您的代碼。依賴注入使您的代碼更易於測試,因為它允許您在測試期間用模擬或存根替換真實依賴項。

// Example of using a mock
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        // Arrange
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        // Act
        Product result = productService.GetProductById(1);
        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
// Example of using a mock
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        // Arrange
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        // Act
        Product result = productService.GetProductById(1);
        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
' Example of using a mock
<TestClass>
Public Class ProductServiceTests
	<TestMethod>
	Public Sub GetProductById_ShouldReturnCorrectProduct()
		' Arrange
		Dim mockRepository = New Mock(Of IProductRepository)()
		mockRepository.Setup(Function(x) x.FindById(1)).Returns(New Product With {
			.Id = 1,
			.Name = "Laptop"
		})
		Dim productService As New ProductService(mockRepository.Object)
		' Act
		Dim result As Product = productService.GetProductById(1)
		' Assert
		Assert.IsNotNull(result)
		Assert.AreEqual("Laptop", result.Name)
	End Sub
End Class
VB   C#

使用數據驅動測試

數據驅動測試允許您使用不同的輸入數據多次運行相同的測試方法。這種技術特別適合在不編寫多個測試方法的情況下測試廣泛的輸入和場景。Visual Studio 支持數據驅動測試,允許您從各種來源指定測試數據,例如內聯數據、CSV 文件或數據庫。

理解並有效使用斷言

斷言是測試方法的核心,因為它們驗證測試的結果。了解測試框架中可用的各種斷言方法,並適當使用它們來檢查預期值、異常或條件。使用正確的斷言可以使你的測試更加清晰和穩固。

持續整合與測試自動化

將單元測試整合到持續整合中 (持續整合) 這確保每次對代碼庫進行更改時,測試會自動運行,有助於及早發現和修復問題。自動化還促進頻繁且一致地運行測試,這對於保持健康的代碼庫至關重要。

保持測試與生產代碼同步

您的單元測試只有在與生產代碼一致時才是有效的。確保任何功能變更都反映在相應的單元測試中。這種做法可以防止過時的測試錯誤通過,並確保您的測試套件準確地反映應用程式的狀態。

從失敗的測試中學習

當測試失敗時,這是一個學習和改進的機會。失敗的測試可以揭露出意想不到的行為、不正確的假設,或是你的代碼中比預期更複雜且容易出錯的部分。仔細分析失敗的測試以了解其根本原因,並利用這些見解來改進你的測試和生成代碼。

IronPDF 介紹

C# 單元測試(開發人員如何操作):圖 2 - IronPDF 網站

IronPDF 是一個為 .NET 開發人員設計的綜合庫,使他們能夠在應用程式中生成、操作和讀取 PDF 文件。IronPDF 以其生成 PDF 文件的能力而聞名 直接從 HTML 轉換為 PDF 使用程式碼、CSS、圖片和JavaScript來創建最佳PDF。它支持廣泛的.NET項目類型和應用環境,包括網頁和桌面應用、服務等,跨越各種操作系統,如Windows、Linux和macOS,以及在Docker和雲環境中,如Azure和AWS。

代码示例

以下是一个如何在 C# 单元测试场景中使用 IronPDF 的示例。假设您想测试一个从 HTML 内容生成 PDF 的函数。您可以使用 IronPDF 将 HTML 渲染为 PDF,然后在测试中验证 PDF 的存在或内容:

using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        // Additional assertions to verify the PDF content could be added here
        // Clean up
        File.Delete(filePath);
    }
}
using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        // Additional assertions to verify the PDF content could be added here
        // Clean up
        File.Delete(filePath);
    }
}
Imports IronPdf
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Imports System.ComponentModel
Imports System.IO
<TestClass>
Public Class PdfGenerationTests
	<TestMethod>
	Public Sub TestHtmlToPdfGeneration()
		IronPdf.License.LicenseKey = "License-Key"
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>")
		Dim filePath As String = Path.Combine(Path.GetTempPath(), "test.pdf")
		pdf.SaveAs(filePath)
		Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.")
		' Additional assertions to verify the PDF content could be added here
		' Clean up
		File.Delete(filePath)
	End Sub
End Class
VB   C#

此範例展示了一個簡單的單元測試,該測試使用 IronPDF 從 HTML 字串生成 PDF,將其保存到臨時文件中,然後驗證文件的存在。

C# 單元測試(開發人員如何使用):圖 3 - 之前的測試通過

結論

C# 單元測試(開發人員如何使用):圖 4 - IronPDF 授權頁面

單元測試是軟體開發生命周期中不可或缺的一部分。通過設置和編寫有效的測試,通過 Visual Studio 的測試資源管理器運行它們,以及使用代碼覆蓋工具,您可以確保您的 C# 應用程序可靠並保持高質量標準。通過理解和應用測試驅動開發原則,您可以進一步提高 C# 單元測試項目的質量。請記住,單元測試的目標不僅僅是發現錯誤,而是為您的應用程序創建一個堅實的基礎,從而促進更輕鬆的更新、調試以及功能添加。 IronPDF,授權選項從 $749 開始。

< 上一頁
CQRS 模式 C#(它如何對開發者起作用)
下一個 >
C# URL 編碼(開發人員如何操作)

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >