2020/01/28, ASP.NET Core 3.1, VS2019, xUnit 2.4.0html
摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【3-xUnit单元测试之简单方法测试】
使用xUnit编写单元测试,测试上一章节的基础公共库git
文章目录github
此分支项目代码后端
上一章节已经创建了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>()); }
[Fact]
特性标记,Fact特性还能够给测试用例取别名在VS中"测试"-"测试资源管理器",打开测试资源管理器:
spa
在测试资源管理器中已经能够看到咱们刚刚写的测试用例。
点击运行全部测试:
3d
等待测试结束,便会给出测试结果:
以上即是最简单的单元测试流程
针对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()); } } }
添加了一个简单的单元测试用例,介绍了最基本的单元测试流程和方法
项目完成后,以下图所示