单元测试能够帮助开发人员确保所开发的模块, 类以及类中的方法等的正确性, 在项目开发过程中, 及时进行单元测试能够避免不必要的 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 三种框架的使用.
来源: https://www.cnblogs.com/wpinfo/p/netcore_unit_test.html