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()); } } }
添加了一個簡單的單元測試用例,介紹了最基本的單元測試流程和方法
項目完成後,以下圖所示