.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三种框架的使用。

posted @ 2018-09-15 14:00 WPInfo 阅读(...) 评论(...) 编辑 收藏