华域联盟 .Net asp.net core 使用 TestServer 来做集成测试的方法

asp.net core 使用 TestServer 来做集成测试的方法

asp.net core 使用 TestServer 来做集成测试的方法
 更新时间:2020年11月20日 09:27:16   作者:Love it or leave it  

这篇文章主要介绍了asp.net core 使用 TestServer 来做集成测试,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Intro
之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 WebServer,之前也有看到过微软文档上 TestServer 的介绍,当时没仔细看过以为差不多就没用,一直是启动了一个真正的 WebServer 去跑集成测试的,上次分享 Xunit.DependencyInjection 改造测试项目的时候,写的烂代码被大师看到了之后, 大师建议用 TestServer 来做集成测试,使用 TestServer 不会真正的占用端口号,不会出现权限问题,于是扒了扒 TestServer 的源码,并用 TestServer 改进了集成测试项目,感谢大师[献花鲜花]~~
Sample
之前的集成测试监听了一个端口号,使用了一个真实的 WebServer,下面改成使用 TestServer
TestServer 现在是在 Microsoft.AspNetCore.TestHost 这个 Nuget 包中,引用这个包就可以使用了
在服务注册的时候调用 UseTestServer 这一扩展方法就可以注入 TestServer 了,集成测试一般会用 HttpClient 来请求服务器端的 API 地址或页面,TestServer 提供了一个方便的 CreateClient 的方法可以很方便的创建一个用来请求 TestServer 的 HttpClient,微软也提供了一些比较方便的扩展方法,可以使用 IHost 的 GetTestClient 扩展方法来获取 HttpClient
改成使用 TestServer 很简单,引用 nuget 包 Microsoft.AspNetCore.TestHost,变更对比如下:

源码概览
TestServer 在启动的时候并没有监听端口,可以参考源码 IServer 的 Start

TestServer 通过 CreateClient 方法来创建调用 TestServer 接口的 HttpClient

通过上面的代码可以看的出来核心代码是在 ClientHandler 中定义的,源码有点多,详细可以直接看源码 github.com/dotnet/aspnetcore/blob/v5.0.0/src/Hosting/TestHost/src/ClientHandler.cs

ClientHandler 重写了 HttpClientHandler 的 SendAsync 方法,使得请求直接拦截掉,不会真正的发生 Http 请求,实际的请求过程首先将 Http 请求的信息转换成 HttpRquestFeature 然后直接交给 TestServer 处理,其实也就是直接交给 asp.net core 的请求管道去处理,请求处理结束之后,获取 HttpContext 响应,获取 HttpResponseFeature 然后转换成 HttpClient 需要的 HttpResponseMessage.
More
TestServer 不仅仅可以支持 HTTP 请求的处理,还支持 WebSocket 的处理,WebSocket 的集成测试也可以使用 TestServer 来处理。
你如果还是比较怀疑是否真的没有 HTTP 请求,可以用 Fildder 之类的 HTTP 抓包工具监控在跑测试的期间是否真的有 HTTP 请求,如果是真正的 WebServer 会有 HTTP 请求,TestServer 不会有 HTTP 请求。
docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-5.0
github.com/dotnet/aspnetcore/tree/v5.0.0/src/Hosting/TestHost/src
github.com/dotnet/aspnetcore/tree/v5.0.0/src/Hosting/TestHost/src/TestServer.cs
github.com/dotnet/aspnetcore/blob/v5.0.0/src/Hosting/TestHost/src/ClientHandler.cs#L58
github.com/OpenReservation/ReservationServer/blob/3.1.0/OpenReservation.API.Test/Startup.cs#L26
github.com/OpenReservation/ReservationServer/commit/e683065bf76e3c51688238c382b2c1f0c8028e7d
到此这篇关于asp.net core 使用 TestServer 来做集成测试的文章就介绍到这了,更多相关asp.net core 集成测试内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:如何在Asp.Net Core中集成ABP Dapper如何在Asp.Net Core中集成Refitasp.net core集成CKEditor实现图片上传功能的示例代码在ASP.NET Core Mvc集成MarkDown的方法asp.net core集成JWT的步骤记录Asp.Net Core利用xUnit进行主机级别的网络集成测试详解asp.net core集成MongoDB的完整步骤ASP.NET Core与NLog集成的完整步骤ASP.NET Core+Docker+Jenkins实现持续集成的完整实例asp.net core 2.0 webapi集成signalr(实例讲解)asp.net core集成kindeditor实现图片上传功能ASP.NET Core 集成 React SPA应用的步骤

asp.net
core
集成测试

相关文章
asp.net 计算字符串中各个字符串出现的次数比如一个字符串"a,b,a,c,b,b,d",现在我们要统计每个字符串出现次数。解决这个问题,我们可以使用泛型集合 Dictionary(TKey,TValue)。它有一个key值用来存储字符串和一个value值,用来存储字符串出现的次数 2012-05-05
收集学习asp.net比较完整的面向对象开发流程如果你已经有较多的面向对象开发经验,跳过以下这两步 第一步:掌握一门.NET面向对象语言第二步:对.NET Framework类库有一定的了解;在具备了OO基础之后,以下是具体的学习ASP.NET技术步骤 2012-12-12
js获取.aspx页面里面的服务器控件和.ascx中的服务器控件值用js获取.ascx控件中服务器控件值时首先要得到服务器控件的ClientID再加上.ascx页面里面的服务器空间ID并用"_"连接 2009-02-02
C# 获取当前星期几三种实现方法获取当前星期几实现这个功能有多种方法,接下来将列出3种供你参考,感兴趣的你可不要错过了哈,希望本文所提供的知识点对你有所帮助 2013-02-02
Visual Studio 2017 community安装配置方法图文教程这篇文章主要为大家详细介绍了Visual Studio 2017 community安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2018-09-09
asp.net自定义分页控件示例这篇文章主要介绍了asp.net自定义分页控件示例,大家参考使用吧 2014-01-01
asp.net 需要登陆的网站上下载网页源代码和文件最近有个项目需要从网络上下载网页信息和文件,并且需要登录后才能下载,所以做了个下载的通用类,供大家参考。 2009-05-05
Visual Studio 2017+OpenCV环境搭建教程这篇文章主要为大家详细介绍了Visual Studio 2017+OpenCV环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-03-03
WebApiClient的接口输入验证方法这篇文章主要介绍了WebApiClient的接口输入验证方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-08-08
MVC实现下拉框联动效果(单选)这篇文章主要为大家详细介绍了MVC实现下拉框联动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-06-06

最新评论

本文由 华域联盟 原创撰写:华域联盟 » asp.net core 使用 TestServer 来做集成测试的方法

转载请保留出处和原文链接:https://www.cnhackhy.com/5022.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部