• 【C#/.NET】xUnit和Moq实现TDD


     目录

     

    前置条件

    Moq

    xUnit

    TDD

    实践

    创建项目

    红灯

    绿灯

    重构

    单元测试一些最佳实践

    总结


     

    前置条件

    Moq

    安装Moq包

    Install-Package Moq

     

            Moq是一个Mocking库,通过它可以轻易地模拟对象来进行测试。在我们的例子中,我们将使用Moq来模拟一个计算器计算接口。

     

    xUnit

            xUnit是一个基于.NET平台的测试框架。它提供了各种测试机制,例如类、测试函数、断言等等。在我们的例子中,我们将使用xUnit来编写C#代码的测试用例。

     

    TDD

            测试驱动开发 (TDD) 是一种软件开发过程或方法,开发人员基本上通过单元测试开始创建软件——与传统方法不同,传统方法是开发软件,最后才创建测试用例以确保成功实施.

    TDD的三个步骤是红绿重构

    • 红灯指的是先编写单元测试,此时还没有写任何具体实现代码,所以单元测试编译都通不过。
    • 绿灯指根据编写的单元测试,实现代码,目标是刚好可以让测试通过。
    • 重构是指的在保证了实现的代码可以通过单元测试,有了单元测试的保障之后,重构代码。重复上述的三个红绿重构步骤。

     

    实践

    创建项目

    复制代码
    dotnet new sln -n Tdd
    
    dotnet new console -o src/Calculator
    
    dotnet new xunit -o test/Calculator.Tests
    
    dotnet sln add src/Calculator
    
    dotnet sln add test/Calculator.Tests
    复制代码

     

    红灯

            由于TDD是测试先行,此次我们模拟开发一个简单的计算器。所以先写单元测试。

    复制代码
    using Moq;
    
    namespace Calculator.Tests;
    
    public class CalculatorTests
    {
        [Fact]
        public void Calculate_WhenCalled_ReturnsNumber()
        {
            Mock calculatorMock = new();
            var num1 = It.IsAny();
            var num2 = It.IsAny();
            var res = It.IsAny();
            calculatorMock.Setup(c => c.Calculate(num1, num2)).Returns(res);
    
            var result = calculatorMock.Object.Calculate(num1, num2);
    
            Assert.Equal(res, result);
        }
    }
    复制代码

     

            测试方法先准备了三个参数,使用了Moq的It.IsAny<>()方法,这个方法可以方便的创建一个对象。然后是Mock<>泛型方法用来模拟接口,通过Setup设置模拟的接口的参数传什么,返回什么结果。

            最后访问了calculatorMock对象的Object,相当于是模拟的ICalculator对象。

            单元测试编写完之后,是一片红,无法编译的。因为目前没有具体实现代码。所以我们完成了TDD的第一步,红灯。

    绿灯

            TDD的第二步,绿灯,我们需要根据现有的单元测试,实现代码。让单元测试能够通过。

    首先是定义一个ICalculator接口,还有Calculate方法

    复制代码
    namespace Calculator;
    
    public interface ICalculator
    {
        int Calculate(int num1, int num2);
    }
    复制代码

     

            运行单元测试,发现可以通过。此时已经完成了第二步,绿灯。

    重构

            由于本文只是介绍TDD,不涉及复杂的逻辑。重构环节根据具体的业务逻辑实现就好了。

     

    单元测试一些最佳实践

    • 命名遵循  测试方法名_测试方案_预期行为
    • 测试代码避免逻辑,如if,while,for和switch
    • 避免将Mock对象当作字段在整个单元测试方法都依赖,因为这样可能对具体一个Mock对象有状态依赖

     

    总结

            在本文中,我们介绍了如何使用xUnit和Moq库实现TDD。通过编写测试代码并在功能代码之前运行它,我们能够快速发现程序中的错误,并提高代码质量。xUnit提供了各种测试机制,如类、测试函数、断言等,Moq库提供了轻松模拟对象的机制。如果您正在寻找一个快速、简单、可靠的开发方法来编写高质量的代码,请尝试TDD。

     

     

  • 相关阅读:
    01_SHELL编程之变量定义(一)
    Java 使用Velocity引擎生成代码
    CSS和JS基础学习
    Vue中的深度监听(Deep Watch):详细解析与实际示例
    ELK极简上手
    Android Media Framework(一)OpenMAX 框架简介
    操作系统八股
    Git要提交到B分支。但是误提交到A分支,然后推送到远程仓库。然后撤回并重新提交到B分支。
    BLIP2模型加载在不同设备上
    【快应用】合众EP12车机上页面显示不全
  • 原文地址:https://www.cnblogs.com/xuyd/p/17482529.html