.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三种框架的使用。
.NET Core: 在.NET Core中进行单元测试的更多相关文章
- 好代码是管出来的——.Net Core中的单元测试与代码覆盖率
测试对于软件来说,是保证其质量的一个重要过程,而测试又分为很多种,单元测试.集成测试.系统测试.压力测试等等,不同的测试的测试粒度和测试目标也不同,如单元测试关注每一行代码,集成测试关注的是多个模块是 ...
- 使用.NET Core在RESTful API中进行路由操作
介绍 当列出REST API的最佳实践时,Routing(路由)总是使它位于堆栈的顶部.今天,在这篇文章中,我们将使用特定于.NET Core的REST(web)API来处理路由概念. 对于新手API ...
- 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1
[ASP.NET Core]EF Core - “影子属性” 有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...
- 在ASP.NET Core的startup类中如何使用MemoryCache
问: 下面的代码,在ASP.NET Core的startup类中创建了一个MemoryCache并且存储了三个键值“entryA”,“entryB”,“entryC”,之后想在Controller中再 ...
- Solr 创建core 从MySql数据库中导入数据
一.创建数据表和数据 在MySql数据中创建mysolrInfo表, 创建字段 id 主键,自动增加 pname :姓名 age :年龄 addtime :增加时间 增加几条数据 二.创建core 当 ...
- 在.net core不同的版本中 webabi引用的包不同
core2.0中: 为了要使用MVC Controller 要安装 Microsoft.AspNetCore.Mvc.Core包 Core2.1中:Microsoft.AspNetCore.App
- ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...
- 从ASP.Net Core Web Api模板中移除MVC Razor依赖项
前言 :本篇文章,我将会介绍如何在不包括MVC / Razor功能和包的情况下,添加最少的依赖项到ASP.NET Core Web API项目中. 一.MVC VS WebApi (1)在ASP. ...
- ASP.NET Core在 .NET Core 3.1 Preview 1中的更新
.NET Core 3.1 Preview 1现在可用.此版本主要侧重于错误修复,但同时也包含一些新功能. 这是此版本的ASP.NET Core的新增功能: 对Razor components的部分类 ...
- [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢?
[.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢? 在ASP.NET Core应用程序中,接 ...
随机推荐
- springboot2.x里面访问静态资源的坑
在spring boot的自定义配置类继承 WebMvcConfigurationSupport 后,发现自动配置的静态资源路径( classpath:/META/resources/,classpa ...
- zookeeper基本命令
集群角色: Leader:客户端提供读和写服务 Follower:提供读服务,所有写服务都需要转交给Leader角色,参与选举 Observer:只提供读服务,不参与选举过程,一般是为了增强zk集群的 ...
- 深入理解数据库磁盘存储(Disk Storage)
数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...
- Netty实现高性能IOT服务器(Groza)之精尽代码篇中
运行环境: JDK 8+ Maven 3.0+ Redis 技术栈: SpringBoot 2.0+ Redis (Lettuce客户端,RedisTemplate模板方法) Netty 4.1+ M ...
- [AST实战]从零开始写一个wepy转VUE的工具
为什么需要 wepy 转 VUE "转转二手"是我司用 wepy 开发的功能与 APP 相似度非常高的小程序,实现了大量的功能性页面,而新业务 H5 项目在开发过程中有时也经常需要 ...
- Qt之加减乘除四则运算-支持负数
一.效果展示 如图1所示,是简单的四则运算测试效果,第一列为原始表达式,第二列为转换后的后缀表达式,冒号后为结果.表达式支持负数和空格,图中是使用了5组测试数据,测试结果可能不全,如大家发现算法有问题 ...
- Flutter 即学即用系列博客——02 一个纯 Flutter Demo 说明
前言 上一篇文章我们搭建好了 Flutter 的开发环境. Flutter 即学即用--01 环境搭建 这一篇我们通过 Flutter 的一个 Demo 来了解下 Flutter. 开发系统:MAC ...
- 一个能快速写出实体类的Api文档管理工具
今天各种MVC框架满天飞,大大降低了编码的难度,写实体类就没有办法回避的一件事了,花大把的时间去做一些重复而且繁琐的工作,实在不是一个优秀程序员的作风,所以多次查找和尝试后,找到一个工具类网站——Ap ...
- Git使用详细教程(9):git log
目录 格式化 检索 显示最近提交 Git中使用git log查看提交日志 如果日志很多的话,默认会以分页方式展示 空格可以翻下一页,ctrl+b翻上一页,q退出 格式化 如果想获取每条日志的简要信息, ...
- centos7 ambari2.6.1.5+hdp2.6.4.0 大数据集群安装部署
前言 本文是讲如何在centos7(64位) 安装ambari+hdp,如果在装有原生hadoop等集群的机器上安装,需要先将集群服务停掉,然后将不需要的环境变量注释掉即可,如果不注释掉,后面虽然可以 ...