使用 HttpServer 或 HttpSelfHostServer 对 Web API 进行单元测试

Posted

技术标签:

【中文标题】使用 HttpServer 或 HttpSelfHostServer 对 Web API 进行单元测试【英文标题】:Unit Testing Web API using HttpServer or HttpSelfHostServer 【发布时间】:2013-01-19 19:47:51 【问题描述】:

我正在尝试为 Web API 项目做一些单元测试。我将模拟 Web API 托管环境。看来我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer)。

只是想知道有什么区别,哪种技术适用于什么,这些选项有什么限制。

【问题讨论】:

【参考方案1】:

您应该使用内存主机进行端到端测试,然后单独测试您的环境的网络连接性。

出于多种原因:

内存主机,顾名思义,完全在内存中运行,因此速度会快得多

自主机需要以提升的权限运行,因此您的测试需要在“管理员”身份的上下文中执行。这远非理想。如果您想从构建脚本或 PowerShell 执行测试,这尤其麻烦,因为结果,这些进程也必须以提升的权限启动。此外,这必须发生在您测试的任何服务器上。

在自托管中,您最终会测试给定操作系统的网络堆栈,这实际上是不应该测试的——因为它可能在不同的环境(开发、登台、QA、生产等)中有所不同。例如 - 给定的端口可能不可用。结果,您可能会被拖入跨不同机器的不必要的调试工作中,甚至无法运行测试。

最后,使用自托管进行测试,仍然不能保证服务在 Web 托管时能够正确运行,反之亦然 - 所以您最好只在内存中进行测试

【讨论】:

您不需要管理员权限来运行自主机。如果您在本地收听,则必须添加 config.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.Exact; 以非管理员身份运行。 推荐使用欧文TestServer。链接:juliencorioland.net/archives/… 如果您使用 HttpSelfHostServer,您可以编写测试,只需更改 url,您的测试就可以在您的开发/阶段服务器上运行。

以上是关于使用 HttpServer 或 HttpSelfHostServer 对 Web API 进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

HttpServer 2 框架使用第三方自定义路由简易封装 Request 对象

Python网络编程(socketserverTFTP云盘HTTPServer服务器模型)

markdown 使用Python的启动微型的HttpServer

netty httpserver

c_cpp 使用evhttp的多线程HTTPServer

python搭建httpserver