.NET Core: 在.NET Core中進行單元測試
單元測試能夠幫助開發人員確保所開發的模組、類以及類中的方法等的正確性,在專案開發過程中,及時進行單元測試能夠避免不必要的BUG以及提高測試效率。
在本文中,我們會分別來學習如何使用MSTest、xUnit以及NUnit這些流行的.NET測試框架來對.NET Core專案進行測試。
一、專案建立
首先,建立一個需要測試的專案。在Visual Studio中建立一個.NET Core 類庫專案,名為Calc,專案建立成功後,刪除自帶的Class1.cs,新增一個類Calculator。
Calculator類定義了一個方法Sum,它接受一個或多個整型數值,並返回這些數值的總和。接下來,我們將使用不同的測試框架對這個類庫專案進行測試。
二、使用MSTest測試框架
要對專案進行測試,首先應建立測試專案,在“解決方案管理器”中右擊解決方案名稱Calc,從快捷選單中新增一個新專案,並選擇“MSTest測試專案”,為專案命名為MSTestSample。
建立的MSTest測試專案,會自動引入三個NuGet包。
對於Microsoft.NET.Test.Sdk,無論使用哪種測試框架(MSTest、xUnit、NUnit),都需要引用這個包;而另外兩個包,則是MSTest測試框架(MSTest.Framework)和測試介面卡(MSTest.TestAdapter),後者用於發現並執行單元執行。
接下來,為測試專案新增對Calc專案的引用。此時,就可以對它進行單元測試了。在UnitTest1.cs中新增測試方法:
幾乎所有的測試框架都使用C#特性(Attribute)來標識測試類與測試方法。MSTest測試框架使用[TestClass]和[TestMethod]來分別標識測試類與測試方法。此外,幾乎所有的測試框架都包含一個名為Assert的類,它包含若干靜態方法,用於驗證測試結果,它將決定這個測試方法的成功與否。
除了上圖中的AreEqual方法,Assert類的其它方法如下:
Assert.AreNotEqual Assert.AreSame Assert.AreNotSame Assert.IsNull Assert.IsNotNull Assert.IsTrue ...
在測試方法中右擊,從快捷選單中可以執行測試。
三、使用xUnit測試框架
以同樣的方式建立一個xUnit測試專案,名為xUnitTestSample。為它新增對Calc專案的引用,並將預設的UnitTest1.cs修改如下:
與MSTest和NUnit測試框架不同,在xUnit中,測試類並不需要使用C#特性標識,只有測試方法才需要。
這裡包含兩個方法,第一個以[Fact]標識以指明它是一個測試方法;第二個使用[Theory]以及[InlineData]特性標識。[Theory]特性不僅指明該方法是一個測試方法,並且使它具有資料驅動測試的功能,而[InlineData]特性用於提供測試資料。[InlineData]特性通過其建構函式為測試方法提供引數;另外,可以在同一個方法上使用多個[InlineData]特性,多個[InlineData]特性將會使測試方法執行多次。
執行xUnit測試方法與前者相同。
四、使用NUnit測試框架
預設情況下,Visual Studio中的新建專案視窗並沒有為NUnit測試專案提供建立模板,然而,.NET Core CLI(命令列介面工具)支援建立NUnit測試專案,命令如下:
dotnet new nunit -o <專案名稱>
不過,在本例中,我們仍然使用Visual Studio來建立NUnit測試專案。在Visual Studio中建立一個.NET Core控制檯應用程式,名為NUnitTestSampe,建立完成後,新增對Calc專案的引用,並新增以下NuGet包。
刪除預設建立的Program.cs檔案,新增一個類CalcTest,其內容如下:
NUnit測試框架使用[TestFixture]和[Test]屬性來分別標識測試類與測試方法。執行NUnit測試方法也與前者相同。
總結
本文討論瞭如何為.NET Core專案建立單元測試,並簡要地瞭解了MSTest、xUnit、NUnit三種框架的使用。