【发布时间】:2013-01-19 19:47:51
【问题描述】:
我正在尝试为 Web API 项目做一些单元测试。我将模拟 Web API 托管环境。看来我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer)。
只是想知道有什么区别,哪种技术适用于什么,这些选项有什么限制。
【问题讨论】:
标签: c# unit-testing asp.net-web-api self-hosting
我正在尝试为 Web API 项目做一些单元测试。我将模拟 Web API 托管环境。看来我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer)。
只是想知道有什么区别,哪种技术适用于什么,这些选项有什么限制。
【问题讨论】:
标签: c# unit-testing asp.net-web-api self-hosting
您应该使用内存主机进行端到端测试,然后单独测试您的环境的网络连接性。
出于多种原因:
内存主机,顾名思义,完全在内存中运行,因此速度会快得多
自主机需要以提升的权限运行,因此您的测试需要在“管理员”身份的上下文中执行。这远非理想。如果您想从构建脚本或 PowerShell 执行测试,这尤其麻烦,因为结果,这些进程也必须以提升的权限启动。此外,这必须发生在您测试的任何服务器上。
在自托管中,您最终会测试给定操作系统的网络堆栈,这实际上是不应该测试的——因为它可能在不同的环境(开发、登台、QA、生产等)中有所不同。例如 - 给定的端口可能不可用。结果,您可能会被拖入跨不同机器的不必要的调试工作中,甚至无法运行测试。
最后,使用自托管进行测试,仍然不能保证服务在 Web 托管时能够正确运行,反之亦然 - 所以您最好只在内存中进行测试
【讨论】:
config.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.Exact; 以非管理员身份运行。
TestServer。链接:juliencorioland.net/archives/…