详谈单元测试

x33g5p2x  于2021-12-26 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(207)

简介

xUnit.net 是针对 .NET 的免费,开源单元测试框架,可并行测试、数据驱动测试。测试项目需引用被测试项目,从而对其进行测试,测试项目同时需要引用 xUnit。测试编写完成后,用 Test Runner 来测试项目,Test Runner 可以读取测试代码,并且知道所会使用的测试框架,然后执行,并显示结果。如下图:项目、测试项目、xUnit、Test Runner 几者关系

支持平台

xUnit.net 目前支持 .Net Framework、.Net Core、.Net Standard、UWP、Xamarin ,可以在这些平台使用 xUnit 进行测试。

Test Runner

Test Runner 有 visual studio 本身的测试资管理器、resharper、dotnet cli 这些工具

  • vs 测试资管理器,右键测试或者 ctrl+ r + t
  • resharper,这个比较占内存,是 JetBrains 旗下的 IDE
  • dotnet cli,使用 cmd 或者 powershell 执行 dotnet test 命令

测试类型

测试类型可分为,单元测试、集成测试、皮下测试、UI测试,对于不同的测试其深度即广度也相对不一样。实际上常用的是单元测试和集成测试,xUnit.net 就属于单元测试。

  • 单元测试:可以测试某个类或方法,具有较高的深度,对应用的功能覆盖面很小
  • 集成测试:有更好的广度,可以测试web资源,数据库资源等
  • 皮下测试:在 web 中针对 controller 下的节点测试
  • UI 测试:是对应用的界面功能测试

Coding 教程

接下来,通过一个案例来入门今天的主题 xUnit 单元测试,这里我们使用简单计数器的 demo 来进行讲解

创建项目

首先,使用 visual studio 创建一个类库 CalculatorPro,解决方案名称为 XUnitDemo

接着创建一个 Calculator 类型,其内有个 方法 Add 用来计算两个数值进行相加,并返回计算结果

public class Calculator
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}

创建测试项目

在类库项目创建完成后,接着创建一个单元测试的项目 CalculatorProTest ,命名通常使用 项目+Test 的约定方式命名测试项目

创建完成测试项目 CalculatorProTest 后,安装 xunit、xunit.runner.visualstudio 两个 package。xunit 是编写单元测试所依赖的,xunit.runner.visualstudio 是在 visual studio 可以运行单元测试的 runner

在依赖的 package 安装完成后,就可以写单元测试了,接着创建 CalculatorTests 类,其内 ShouldAddEquals5 方法用来测试 Calculator 中的 Add 方法。

Fact 说明这个方法是个单元测试方法,sut 是个通用命名规范,Assert 用来对比结果。代码中的三步也就是单元测试所谓的 3A

public class CalculatorTests
{
    [Fact]
    public void ShouldAddEquals5() //注意命名规范
    {
        //Arrange
        var sut = new Calculator(); //sut-system under test,通用命名
        //Act
        var result = sut.Add(3, 2);
        //Assert
        Assert.Equal(5, result);

    }
}

运行单元测试

在项目与测试项目创建完成后,就可以运行单元测试了。在 CalculatorTests 类中 ShouldAddEquals5 方法上,右键点击运行单元测试或者使用快捷键 ctrl + r + t ,就可以看到测试资源管理器,及单元测试运行结果。

下图可以看到 3 + 2 = 5 ,在 Assert.Equal(5, result) 就说明测试是通过的(5 是期望结果,result 是单元测试方法执行结果),在资源管理器可以看到,单元测试是通过的

可以模拟单元测试 fail 情况,将 Assert.Equal(5, result) 改为 Assert.Equal(6, result) ,即期望的结果 5 改为期望结果为 6 ,3+2 必然不 = 6,然后启动单元测试 ,可以看到单元测试是不通过的

分组依据,在测试资源管理器中,可以根项目、类、命名空间等,进行单元测试资源进行各类视图的查看。如下图

扩展:还可以通过 dotnet cli 在测试项目目录,执行单元测试命令 dotnet test ,当然还可以有许多参数,有兴趣的小伙伴可使用 help 查看学习

相关文章