天天看点

ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

2020/01/28, ASP.NET Core 3.1, VS2019, xUnit 2.4.0

摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【3-xUnit单元测试之简单方法测试】

使用xUnit编写单元测试,测试上一章节的基础公共库

文章目录

此分支项目代码

上一章节已经建立了Common公共类库,本章节介绍编写简单的单元测试,对上一章节的公共类库中EnumExtension方法编写单元测试,同时也是介绍上一章节中公共类库EnumExtension的使用方法

官方文档对测试的最佳实践

新建测试项目#

在tests解决方案文件夹下,新建xUnit测试项目,存放在解决方案tests路径下:

ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

我这里测试项目名称规则为"测试目标项目名称+Tests",这里测试的是Common项目,所以测试项目取名CommonTests

项目新建成功后,记得要引用

MS.Common

类库

新建一个枚举用于测试#

既然是为了测试枚举方法,当然需要先有一个枚举

StatusCodeEnum.cs

类,就存放在测试项目下:

using System.ComponentModel;

namespace CommonTests
{
    public enum StatusCode
    {
        [Description("已删除")]
        Deleted = -1,//软删除,已删除的无法恢复,无法看见,暂未使用
        [Description("生效")]
        Enable = 0,
        [Description("失效")]
        Disable = 1//失效的还可以改为生效
    }
}
           

编写枚举方法测试代码#

把原先的UnitTest1.cs删除,新建

EnumExtensionTest.cs

类:

可以看到我这里测试类命名规则为"测试目标类名称+Test",这里测试的是EnumExtension类,所以取名为EnumExtensionTest

将EnumExtensionTest类修改为pulic类型

在其中添加测试一个测试方法:

[Fact]
[Trait("GetEnum", "itemName")]
public void GetEnum_EnumName_ReturnCorrespondEnum()
{
    //Arrange
    StatusCode statusCode = StatusCode.Deleted;

    //Act
    string actual = statusCode.ToString();

    //Assert
    Assert.Equal(statusCode, actual.GetEnum<StatusCode>());
}
           
  • 测试类必须是public类型
  • 测试用例需要打上

    [Fact]

    特性标记,Fact特性还可以给测试用例取别名
  • Trait特性可以对测试用例进行分组说明
  • 更多特性和使用方法可以搜索相关资源
  • 测试方法命名规则为"要测试的方法的名称+测试的方案+调用方案时的预期行为":
    • 此处测的是GetEnum方法,使用Enum名称,获取对应的枚举
    • 所以叫GetEnum_EnumName_ReturnCorrespondEnum
    • 整体方法名要易于理解测试的目的
  • 测试要分为三部分(AAA):Arrange、Act、Assert:
    • 安排对象,根据需要对其进行创建和设置
    • 作用于对象
    • 断言某些项按预期进行

运行测试#

在VS中"测试"-"测试资源管理器",打开测试资源管理器:

ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

在测试资源管理器中已经可以看到我们刚刚写的测试用例。

点击运行所有测试:

ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

等待测试结束,便会给出测试结果:

ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

以上便是最简单的单元测试流程

针对EnumExtension方法完整的测试用例代码:

using MS.Common.Extensions;
using Xunit;

namespace CommonTests
{
    public class EnumExtensionTest
    {
        [Fact]
        [Trait("GetEnum", "itemName")]
        public void GetEnum_EnumName_ReturnCorrespondEnum()
        {
            //Arrange
            StatusCode statusCode = StatusCode.Deleted;

            //Act
            string actual = statusCode.ToString();

            //Assert
            Assert.Equal(statusCode, actual.GetEnum<StatusCode>());
        }
        [Fact]
        [Trait("GetEnum", "itemValue")]
        public void GetEnum_EnumValue_ReturnCorrespondEnum()
        {
            //Arrange
            StatusCode statusCode = StatusCode.Disable;

            //Act
            int actual = statusCode.GetHashCode();

            //Assert
            Assert.Equal(statusCode, actual.GetEnum<StatusCode>());
        }

        [Fact]
        [Trait("GetEnumName", "itemValue")]
        public void GetEnumName_EnumValue_ReturnCorrespondEnumName()
        {
            //Arrange
            StatusCode statusCode = StatusCode.Enable;

            //Act
            int actual = statusCode.GetHashCode();

            //Assert
            Assert.Equal(statusCode.ToString(), actual.GetEnumName<StatusCode>());
        }

        [Fact]
        [Trait("GetEnumValue", "itemName")]
        public void GetEnumValue_EnumName_ReturnCorrespondEnumValue()
        {
            //Arrange
            StatusCode statusCode = StatusCode.Disable;

            //Act
            string actual = statusCode.ToString();

            //Assert
            Assert.Equal(statusCode.GetHashCode(), actual.GetEnumValue<StatusCode>());
        }

        [Fact]
        [Trait("GetDescription", "Enum")]
        public void GetDescription_Enum_ReturnCorrespondEnumDescription()
        {
            //Arrange
            StatusCode statusCode = StatusCode.Deleted;

            //Assert
            Assert.Equal("已删除", statusCode.GetDescription());
        }
    }
}
           

添加了一个简单的单元测试用例,介绍了最基本的单元测试流程和方法

项目完成后,如下图所示

ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】ASP.NET Core搭建多层网站架构【3-xUnit单元测试之简单方法测试】

作者:kasnti

出处:https://www.cnblogs.com/kasnti/p/12237965.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

继续阅读