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路径下:

我这里测试项目名称规则为"测试目标项目名称+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中"测试"-"测试资源管理器",打开测试资源管理器:

在测试资源管理器中已经可以看到我们刚刚写的测试用例。
点击运行所有测试:

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

以上便是最简单的单元测试流程
针对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搭建多层网站架构【12-xUnit单元测试之集成测试】
2020/02/01, ASP.NET Core 3.1, VS2019, xunit 2.4.1, Microsoft.AspNetCore.TestHost 3.1.1 摘要:基于ASP.NET ...
- ASP.NET Core搭建多层网站架构【0-前言】
2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构 目录 0-前言 1-项目结构分层建立 2-公共基 ...
- ASP.NET Core搭建多层网站架构【1-项目结构分层建立】
2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[1-项目结构分层建立] 文章目录 此分支项目代码 ...
- ASP.NET Core搭建多层网站架构【2-公共基础库】
2020/01/28, ASP.NET Core 3.1, VS2019,Newtonsoft.Json 12.0.3, Microsoft.AspNetCore.Cryptography.KeyDe ...
- ASP.NET Core搭建多层网站架构【4-工作单元和仓储设计】
2020/01/28, ASP.NET Core 3.1, VS2019, Microsoft.EntityFrameworkCore.Relational 3.1.1 摘要:基于ASP.NET Co ...
- ASP.NET Core搭建多层网站架构【5-网站数据库实体设计及映射配置】
2020/01/29, ASP.NET Core 3.1, VS2019, EntityFrameworkCore 3.1.1, Microsoft.Extensions.Logging.Consol ...
- ASP.NET Core搭建多层网站架构【6-注册跨域、网站核心配置】
2020/01/29, ASP.NET Core 3.1, VS2019, NLog.Web.AspNetCore 4.9.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站 ...
- ASP.NET Core搭建多层网站架构【7-使用NLog日志记录器】
2020/01/29, ASP.NET Core 3.1, VS2019, NLog.Web.AspNetCore 4.9.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站 ...
- ASP.NET Core搭建多层网站架构【8.1-使用ViewModel注解验证】
2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[8.1-使用ViewModel注解验证] 使用V ...
随机推荐
- 使用Powershell开机启动隐藏窗口的程序
1.打开注册表找到键值:计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 2.添加字符串值:StartJetSer ...
- 经常犯的错误之递归写不全return
在写递归函数的时候,只在最后一层写return,中间的过程没有return,导致结果的丢失. 举个例子 LL query(LL i, LL k) { if (sum[i] < k) { ; } ...
- k8s集群问题记录
k8s集群问题记录 k8s学习方案 问题解决思路 主要学习路径: rancher(k8s)->rke->helm->kubectl->k8s(k8s中文api) 常见问题总结: ...
- 题解【洛谷P1315】[NOIP2011]观光公交
题目描述 风景迷人的小城 Y 市,拥有 \(n\) 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务. 观光公交车在第 \(0\) 分钟出现在 \( ...
- ansible笔记(8):初识ansible playbook
回顾总结:我们来想象一个工作场景,看看怎样把之前的知识点应用到这个工作场景中.假设,我们想要在192.168.10.2主机上安装nginx并启动,我们可以在ansible控制主机中执行如下3条命令. ...
- PAT-链表-A1032 Sharing
题意:给出两条链表的首地址以及若干个节点的的地址.数据.下一个节点的地址,求两条链表的首个共用节点的地址.如果两条链表没有共用节点,则输出-1. 思路:使用静态链表,首先遍历一遍第一个链表并进行标记. ...
- poj 3057(bfs+二分匹配)
题目链接:http://poj.org/problem?id=3057 题目大概意思是有一块区域组成的房间,房间的边缘有门和墙壁,'X'代表墙壁,'D'代表门,房间内部的' . '代表空区域,每个空区 ...
- ThinkPHP中的时间自动填充 无法获取时间
protected $_auto = array( array('addTime','time','1','function'), ); addTime在数据库里的的类型必须为int ...
- Jmeter学习之-聚合报告详解
在对接口进行性能测试时,经常用到jmeter的聚合报告来分析数据 首先在待测试的接口或线程组下添加“监听器>聚合报告” 执行请求后,将生成聚合报告,聚合报告包括以下结果参数(中文版+英文版) A ...
- 16进制 32进制 base64之间的区别
Base64: 包含大写字母(A-Z),小写字母(a-z),数字(0-9)以及+/; Base32: 而Base32中只有大写字母(A-Z)和数字234567: Base16: 而Base16就是16 ...