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

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

摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【3-使用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 ShouldGetEnumFromName(){ Assert.Equal(StatusCode.Deleted, "Deleted".GetEnum<StatusCode>());}
  • 测试类必须是public类型
  • 测试用例需要打上[Fact]特性标记,Fact特性还可以给测试用例取别名
  • Trait特性可以对测试用例进行分组说明
  • 更多特性和使用方法可以搜索相关资源
  • 测试方法命名规则为"Should+测试方法",此处测的是GetEnum方法,而此方法有多个重载,所以补充FromName作为解释说明
  • Assert是断言,判断StatusCode.Deleted值是否和"Deleted".GetEnum<StatusCode>()相同,如果相同表示测试通过

运行测试

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

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

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

以上便是最简单的单元测试流程
针对EnumExtension方法完整的测试用例代码:

using MS.Common.Extensions;using Xunit;namespace CommonTests{ public class EnumExtensionTest { [Fact] [Trait("GetEnum", "itemName")] public void ShouldGetEnumFromName() { Assert.Equal(StatusCode.Deleted, "Deleted".GetEnum<StatusCode>()); } [Fact] [Trait("GetEnum", "itemValue")] public void ShouldGetEnumFromValue() { Assert.Equal(StatusCode.Disable, 1.GetEnum<StatusCode>()); } [Fact] [Trait("GetEnumName", "itemValue")] public void ShouldGetEnumNameFromValue() { Assert.Equal(StatusCode.Enable.ToString(), 0.GetEnumName<StatusCode>()); } [Fact] [Trait("GetEnumValue", "itemName")] public void ShouldGetEnumValueFromName() { Assert.Equal((int)StatusCode.Disable, "Disable".GetEnumValue<StatusCode>()); } [Fact] [Trait("GetDescription", "Enum")] public void ShouldGetDescriptionFromEnum() { Assert.Equal("已删除", StatusCode.Deleted.GetDescription()); } }}

总结/说明

  • 添加了一个简单的单元测试用例,介绍了最基本的单元测试流程和方法
  • 之后还会有《使用xUnit编写单元测试之复杂业务测试》,其中涉及到针对有DI依赖注入方法的获取及测试

相关文章