详谈单元测试-xUnit

简介

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

支持平台

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 就属于单元测试。
详谈单元测试-xUnit_第2张图片

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

AAA

AAA 指得是单元测试的三个阶段 ,分别是 Arrange、Act、Assert

  • Arrange: 在这里做一些先决的设定。例如创建对象实例,数据,输入等
  • Act: 在这里执行生产代码并返回结果。例如调用方法或者设置属性
  • Assert:在这里检查结果,会产生测试通过或者失败两种结果
    详谈单元测试-xUnit_第3张图片

Coding 教程

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

创建项目

首先,使用 visual studio 创建一个类库 CalculatorPro,解决方案名称为 XUnitDemo
详谈单元测试-xUnit_第4张图片

详谈单元测试-xUnit_第5张图片
接着创建一个 Calculator 类型,其内有个 方法 Add 用来计算两个数值进行相加,并返回计算结果

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

详谈单元测试-xUnit_第6张图片

创建测试项目

在类库项目创建完成后,接着创建一个单元测试的项目 CalculatorProTest ,命名通常使用 项目+Test 的约定方式命名测试项目
详谈单元测试-xUnit_第7张图片
详谈单元测试-xUnit_第8张图片
创建完成测试项目 CalculatorProTest 后,安装 xunit、xunit.runner.visualstudio 两个 package。xunit 是编写单元测试所依赖的,xunit.runner.visualstudio 是在 visual studio 可以运行单元测试的 runner
详谈单元测试-xUnit_第9张图片
在依赖的 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 是单元测试方法执行结果),在资源管理器可以看到,单元测试是通过的
详谈单元测试-xUnit_第10张图片
可以模拟单元测试 fail 情况,将 Assert.Equal(5, result) 改为 Assert.Equal(6, result) ,即期望的结果 5 改为期望结果为 6 ,3+2 必然不 = 6,然后启动单元测试 ,可以看到单元测试是不通过的
详谈单元测试-xUnit_第11张图片
分组依据,在测试资源管理器中,可以根项目、类、命名空间等,进行单元测试资源进行各类视图的查看。如下图
详谈单元测试-xUnit_第12张图片
扩展:还可以通过 dotnet cli 在测试项目目录,执行单元测试命令 dotnet test ,当然还可以有许多参数,有兴趣的小伙伴可使用 help 查看学习
详谈单元测试-xUnit_第13张图片

你可能感兴趣的:(.Net,单元测试)