ASP.NET Core项目如何使用xUnit进行单元测试


小编给大家分享一下ASP.NETCore项目如何使用xUnit进行单元测试,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在以前的.NET Framework项目中,我们也写过一些单元测试的项目,而在ASP.NET Core 这种Web或者API应用程序中要做单元测试是很方便的。这篇文章主要讲解如何使用xUnit对ASP.NET Core应用程序做单元测试。.NET Core中常用的测试工具还有NUnit和MSTest。xUnit是一个测试框架,可以针对.net/.net core项目进行测试。测试项目需要引用被测试的项目,从而对其进行测试。测试项目同时需要引用xUnit库。测试编写好后,用Test Runner来运行测试。Test Runner可以读取测试代码,并且会知道我们所使用的测试框架,然后执行,并显示结果。目前可用的Test Runner包括vs自带的Test Explorer,或者dotnet core命令行,以及第三方工具,例如resharper等。xUnit可以支持多种平台的测试:.NET Framework.NET Core.NET StandardUWPXamarin为了使示例项目更加的贴近真实的项目开发,这里采用分层的方式创建一个示例项目,创建完成后的项目结构如下图所示:下面讲解一下每层的作用,按照从上往下的顺序:TestDemo:从名字就可以看出来,这是一个单元测试的项目,针对控制器进行测试。UnitTest.Data:数据访问,封装与EntityFrameworkCore相关的操作。UnitTest.IRepository:泛型仓储接口,封装基础的增删改查。UnitTest.Model:实体层,定义项目中使用到的所有实体。UnitTest.Repository:泛型仓储接口实现层,实现接口里面定义的方法。UnitTestDemo:ASP.NET Core WebApi,提供API接口。实体层里面只有一个Student类:里面封装与EF Core有关的操作,首先需要引入Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools三个NuGet包,直接在管理NuGet程序包里面引入,这里不在讲述。引入相关NuGet包以后,我们创建数据上下文类,该类继承自EF Core的DbContext,里面设置表名和一些属性:这里采用数据迁移的方式生成数据库,需要在API项目中引入Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.免费云主机域名EntityFrameworkCore.Tools三个NuGet包。引入方式同上。然后在API项目的appsettings.json文件里面添加数据库链接字符串:在JSON文件中添加完连接字符串以后,修改Startup类的ConfigureServices方法,在里面配置使用在json文件中添加的连接字符串:这样就可以使用数据迁移的方式生成数据库了。该项目中使用泛型仓储,定义一个泛型仓储接口:然后在定义IStudentRepository接口继承自IRepository泛型接口:这里是实现上面定义的仓储接口:先添加一个Value控制器,里面只有一个Get方法,而且没有任何的依赖关系,先进行最简单的测试:我们在添加测试项目的时候,直接选择使用xUnit测试项目,如下图所示:这样项目创建完成以后,就会自动添加xUnit的引用:但要测试 ASP.NET Core 应用还需要添加两个 NuGet 包:上面是使用命令的方式进行安装,也可以在管理NuGet程序包里面进行搜索,然后安装。千万不要忘记还要引入要测试的项目。最后的项目引入是这样的:都添加完以后,重新编译项目,保证生成没有错误。单元测试按照从上往下的顺序,一般分为三个阶段:Arrange:准备阶段。这个阶段做一些准备工作,例如创建对象实例,初始化数据等。Act:行为阶段。这个阶段是用准备好的数据去调用要测试的方法。Assert:断定阶段。这个阶段就是把调用目标方法的返回值和预期的值进行比较,如果和预期值一致则测试通过,否则测试失败。我们在API项目中添加了一个Value控制器,我们以Get方法作为测试目标。一般一个单元测试方法就是一个测试用例。我们在测试项目中添加一个ValueTest测试类,然后编写一个单元测试方法,这里是采用模拟HTTPClient发送Http请求的方式进行测试:我们在构造函数中,通过TestServer拿到一个HttpClient对象,用它来模拟Http请求。我们写了一个测试用例,完整演示了单元测试的Arrange、Act和Assert三个步骤。单元测试用例写好以后,打开“测试资源管理器”:在底部就可以看到测试资源管理器了:在要测试的方法上面右键,选择“运行测试”就可以进行测试了:注意观察测试方法前面图标的颜色,目前是蓝色的,表示测试用例还没有运行过:测试用例结束以后,我们在测试资源管理器里面可以看到结果:绿色表示测试通过。我们还可以看到执行测试用例消耗的时间。如果测试结果和预期结果一致,那么测试用例前面图标的颜色也会变成绿色:如果测试结果和预期结果不一致就会显示红色,然后需要修改代码直到出现绿色图标。我们修改测试用例,模拟测试失败的情况:然后运行测试用例:我们也可以通过添加断点的方式在测试用例中进行调试。调试单元测试很简单,只需要在要调试的方法上面右键选择“调试测试”,如下图所示:其它操作就跟调试普通方法一样。除了添加断点调试,我们还可以采用打印日志的方法来快速调试,xUnit可以很方便地做到这一点。我们修改ValueTest类:这里我们在构造函数中添加了 ITestOutputHelper 参数,xUnit 会将一个实现此接口的实例注入进来。拿到这个实例后,我们就可以用它来输出日志了。运行(注意不是 Debug)此方法,运行结束后在测试资源管理器里面查看:点击就可以看到输出的日志了:在上面的例子中,我们是使用的简单的Value控制器进行测试,控制器里面没有其他依赖关系,如果控制器里面有依赖关系该如何测试呢?方法还是一样的,我们新建一个Student控制器,里面依赖IStudentRepository接口,代码如下:然后在Startup类的ConfigureServices方法中注入:在单元测试项目中添加StudentTest类:然后运行单元测试:可以看到,控制器里面如果有依赖关系,也是可以使用这种方式进行测试的。Post方法也可以使用同样的方式进行测试,修改控制器,添加Post方法:在增加一个Post的测试方法:运行测试用例:这样一个简单的单元测试就完成了。我们观察上面的两个测试类,发现这两个类都有一个共同的特点:都是在构造函数里面创建一个HttpClient对象,我们可以把创建HttpClient对象抽离到一个共同的基类里面,所有的类都继承自基类。该基类代码如下:然后修改StudentTest类,使该类继承自上面创建的基类:以上是“ASP.NETCore项目如何使用xUnit进行单元测试”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注百云主机行业资讯频道!

相关推荐: php中时间和时间戳如何相互转换

本文小编为大家详细介绍“php中时间和时间戳如何相互转换”,内容详细,步骤清晰,细节处理妥当,希望这篇“php中时间和时间戳如何相互转换”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 一、时间转换为时间戳在 PHP 中,将时间转换为…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/23 18:16
Next 07/23 18:16

相关推荐