美文网首页
asp.net core 使用 TestServer 来做集成测

asp.net core 使用 TestServer 来做集成测

作者: 易霂 | 来源:发表于2020-12-07 22:22 被阅读0次

    Sample

    之前的集成测试监听了一个端口号,使用了一个真实的 WebServer,下面改成使用 TestServer

    TestServer 现在是在 Microsoft.AspNetCore.TestHost 这个 Nuget 包中,引用这个包就可以使用了

    在服务注册的时候调用 UseTestServer 这一扩展方法就可以注入 TestServer 了,集成测试一般会用 HttpClient 来请求服务器端的 API 地址或页面,TestServer 提供了一个方便的 CreateClient 的方法可以很方便的创建一个用来请求 TestServer 的 HttpClient,微软也提供了一些比较方便的扩展方法,可以使用 IHost 的 GetTestClient 扩展方法来获取 HttpClient

    改成使用 TestServer 很简单,引用 nuget 包 Microsoft.AspNetCore.TestHost,变更对比如下:

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

    源码概览

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

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

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

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

    通过上面的代码可以看的出来核心代码是在 ClientHandler 中定义的。

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

    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 请求。

    相关文章

      网友评论

          本文标题:asp.net core 使用 TestServer 来做集成测

          本文链接:https://www.haomeiwen.com/subject/xhjxgktx.html