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路徑下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iY5cjZ0MjMmJTZwUmMkJ2MhdDO4UDZhVDO5EmNyMGZz8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
我這裡測試項目名稱規則為"測試目标項目名稱+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());
}
}
}
添加了一個簡單的單元測試用例,介紹了最基本的單元測試流程和方法
項目完成後,如下圖所示
作者:kasnti
出處:https://www.cnblogs.com/kasnti/p/12237965.html
版權:本作品采用「署名-非商業性使用-相同方式共享 4.0 國際」許可協定進行許可。