天天看點

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 國際」許可協定進行許可。

繼續閱讀