單元測試能夠幫助開發人員確保所開發的模塊、類以及類中的方法等的正確性,在項目開發過程中,及時進行單元測試能夠避免不必要的BUG以及提高測試效率。 在本文中,我們會分別來學習如何使用MSTest、xUnit以及NUnit這些流行的.NET測試框架來對.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三種框架的使用。