成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 xUnit 快速編寫 .NET 應用單元測試

開發 測試
單元測試能夠在開發階段快速發現邏輯錯誤或邊界條件問題。今天大姚將帶領大家使用 xUnit 快速編寫 .NET 應用單元測試。

在當今快速迭代的軟件開發環境中,單元測試已成為保障代碼質量和項目可靠性的重要基石,通過驗證程序最小單元(如函數、方法、類等)的獨立行為,能夠在開發階段快速發現邏輯錯誤或邊界條件問題。今天大姚將帶領大家使用 xUnit 快速編寫 .NET 應用單元測試。

項目介紹

xUnit 是一個開源、免費、以社區為中心的 .NET 單元測試框架,是用于 C# 和 F#(其他 .NET 語言可能也能運行,但未提供官方支持)進行單元測試的最新技術。xUnit 能夠與 Visual Studio、Visual Studio Code、ReSharper、CodeRush 和 TestDriven.NET 兼容。它是.NET 基金會的一部分,并遵循其行為準則。

單元測試優秀做法

微軟官方出品的 .NET 單元測試最佳做法:https://learn.microsoft.com/zh-cn/dotnet/core/testing/unit-testing-best-practices

(1) 避免基礎結構依賴項。

(2) 以最精簡方式編寫通過測試。

(3) 避免使用魔法字符串。

(4) 避免在單元測試中編寫代碼邏輯。

(5) 遵循測試命名標準:

  • 要測試的方法的名稱。
  • 測試方法的情境。
  • 調用方案時的預期行為。

命名標準非常重要,因為它們有助于表達測試目的和應用程序。測試不僅僅是確保代碼正常工作。它們還提供文檔。只需查看單元測試套件,即可推斷代碼的行為,不必查看代碼本身。此外,測試失敗時,可以確切地看到哪些方案不符合預期。

單元測試基本步驟

我們在編寫單元測試的時候通常遵循 3A 模式(Arrange-Act-Assert),這是單元測試的核心方法論:

  • Arrange(準備階段): 該階段用于模擬數據、初始化對象等準備工作。
  • Act(執行階段): 該階段用于準備好的數據調用要測試的最小單元方法。
  • Assert(斷言階段): 該階段是單元測試中的驗證環節,它通過將目標方法返回的實際結果與預期結果進行比對,來判定測試是否通過。

創建單元測試項目

因為 xUnit 框架與 Visual Studio 是兼容的,我們可以直接在 Visual Studio 中搜索:xUnit 測試項目 模板,然后創建一個名為:xUnitExercise 的 .NET 9 單元測試項目。

編寫簡單的單元測試

public class UnitTest
    {
        /// <summary>
        /// 測試 Calculator 的 Add 方法功能
        /// 驗證兩個正數相加返回正確的和
        /// </summary>
        [Fact]// 標識這是一個獨立的測試用例
        public void Add_TwoPositiveNumbers_ReturnsCorrectSum()
        {
            // ===== Arrange(準備階段) =====
            var calculator = new Calculator();
            int num1 = 5;
            int num2 = 7;
            int expected = 12;

            // ===== Act(執行階段) =====
            int actual = calculator.Add(num1, num2);

            // ===== Assert(斷言階段) =====
            Assert.Equal(expected, actual);
        }

        /// <summary>
        /// 測試 Calculator 的 Divide 方法異常處理
        /// 驗證除數為零時正確拋出 DivideByZeroException 異常
        /// </summary>
        [Fact]
        public void Divide_ByZero_ThrowsDivideByZeroException()
        {
            // Arrange
            var calculator = new Calculator();
            int dividend = 10;
            int divisor = 0; //觸發異常的除數

            // Act & Assert
            // 驗證執行除法時是否拋出特定異常
            var exception = Assert.Throws<DivideByZeroException>(
                () => calculator.Divide(dividend, divisor));

            // 驗證異常消息是否符合預期
            Assert.Equal("除數不能為零", exception.Message);
        }

        /// <summary>
        /// 參數化測試 Calculator 的 IsEven 方法功能
        /// 驗證不同輸入數值的奇偶判斷是否正確
        /// </summary>
        /// <param name="number">測試輸入值</param>
        /// <param name="expected">預期結果(true=偶數,false=奇數)</param>
        [Theory] // 標識這是一個參數化測試
        [InlineData(4, true)]   // 測試數據1:偶數4,預期true
        [InlineData(7, false)]  // 測試數據2:奇數7,預期false
        [InlineData(8, false)]  // 測試數據3:偶數8,預期false 【這里是特意為了查看預期結果不一致的情況】
        public void IsEven_Number_ReturnsCorrectResult(int number, bool expected)
        {
            // Arrange
            var calculator = new Calculator();

            // Act
            bool actual = calculator.IsEven(number);

            // Assert
            Assert.Equal(expected, actual);
        }

        public class Calculator
        {
            public int Add(int a, int b)
            {
                return a + b;
            }

            public bool IsEven(int number)
            {
                return number % 2 == 0;
            }

            public double Divide(int dividend, int divisor)
            {
                if (divisor == 0)
                    throw new DivideByZeroException("除數不能為零");

                return (double)dividend / divisor;
            }
        }
    }

運行單元測試

選擇項目右鍵 => 運行測試:

或者直接在對應的方法正上方選擇 Run:

調試單元測試

選擇項目右鍵 => 運行調試:

或者直接在對應的方法正上方選擇 Debug:

項目源碼地址

更多項目實用功能和特性歡迎前往項目開源地址查看??,別忘了給項目一個Star支持??。

  • GitHub開源地址:https://github.com/xunit/xunit
  • 本文示例源碼地址:https://github.com/YSGStudyHards/DotNetExercises/tree/master/xUnitExercise
責任編輯:趙寧寧 來源: 追逐時光者
相關推薦

2023-10-07 08:49:56

測試驅動開發Xunit 框架

2022-04-08 09:01:56

腳本Go應用單元

2017-01-14 23:26:17

單元測試JUnit測試

2017-01-16 12:12:29

單元測試JUnit

2009-07-23 16:29:06

ASP.NET單元測試

2017-01-14 23:42:49

單元測試框架軟件測試

2009-07-24 11:33:12

MVC單元測試ASP.NET

2024-10-28 08:07:17

2017-03-23 16:02:10

Mock技術單元測試

2023-07-26 08:58:45

Golang單元測試

2012-05-17 09:09:05

Titanium單元測試

2013-06-04 09:49:04

Spring單元測試軟件測試

2011-07-27 13:39:28

iOS GH-Unit 單元測試

2021-03-28 23:03:50

Python程序員編碼

2024-10-16 16:09:32

2010-03-04 15:40:14

Python單元測試

2009-07-23 16:14:03

.NET測試工具NUnit2.5

2020-08-18 08:10:02

單元測試Java

2019-01-29 09:00:44

PyHamcrest單元測試框架

2023-08-02 13:59:00

GoogleTestCTest單元測試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞的视频免费在线观看 | 欧美网址在线观看 | 操皮视频 | 精品亚洲永久免费精品 | 日韩精品久久久久久 | 亚洲一区中文字幕在线观看 | 国产成人午夜精品影院游乐网 | 日日干夜夜操 | 中文一区二区 | 69堂永久69tangcom | 人人种亚洲 | 国产精品a一区二区三区网址 | 亚洲日本一区二区 | 国产精品成人久久久久 | 国产成人99久久亚洲综合精品 | 伊人网综合 | 日韩资源| av不卡一区| 久久久久久久久久久高潮一区二区 | 亚洲精品888 | 亚洲精品9999| www.日韩系列 | 色天堂影院| 91久久国产综合久久 | 亚洲一区二区三区在线 | www.日韩欧美 | 久久久久国产一区二区三区四区 | 国产真实精品久久二三区 | 一区二区不卡视频 | 日一区二区三区 | 久久中文字幕av | 亚洲免费视频在线观看 | 欧美成人久久 | 国产精品国产精品国产专区不卡 | 天天摸天天干 | av一级| 天天躁日日躁狠狠躁白人 | 欧美a视频 | 成人久久18免费网站麻豆 | 日日摸夜夜爽人人添av | 日韩欧美在线播放 |