C# 使用HttpServer或HttpSelfHostServer对Web API进行单元测试
我正在尝试为一个WebAPI项目进行一些单元测试。我将模拟WebAPI托管环境。看起来我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer)C# 使用HttpServer或HttpSelfHostServer对Web API进行单元测试,c#,unit-testing,asp.net-web-api,self-hosting,C#,Unit Testing,Asp.net Web Api,Self Hosting,我正在尝试为一个WebAPI项目进行一些单元测试。我将模拟WebAPI托管环境。看起来我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer) 只是想知道有什么区别,哪种技术适合做什么,这些选项是否有任何限制。您应该使用内存主机进行端到端测试,然后单独测试环境的网络连接 出于若干原因: 顾名思义,内存主机完全在内存中运行,所以速度会快得多 Self-host需要以提升的权限运行,因此您的测试需要在“admin”标识的上下文中执行。这远非理想。如果您想从构建脚本
只是想知道有什么区别,哪种技术适合做什么,这些选项是否有任何限制。您应该使用内存主机进行端到端测试,然后单独测试环境的网络连接 出于若干原因:
- 顾名思义,内存主机完全在内存中运行,所以速度会快得多
- Self-host需要以提升的权限运行,因此您的测试需要在“admin”标识的上下文中执行。这远非理想。如果您想从构建脚本或PowerShell执行测试,这尤其麻烦,因为这些过程也必须以提升的权限启动。此外,这必须发生在您测试的任何服务器上
- 在self-host中,您最终测试的是给定操作系统的网络堆栈,这实际上是不应该测试的,因为它可能在不同的环境中有所不同(开发、登台、QA、生产等等)。例如,给定的端口可能不可用。因此,为了让测试运行,您可能会在不同的机器上进行不必要的调试工作
- 最后,使用自托管进行测试仍然不能保证服务在web托管时能够正确运行,反之亦然,因此您最好只在内存中进行测试
config.HostNameComparisonMode=System.ServiceModel.HostNameComparisonMode.Exact如果您正在本地侦听,则code>以非管理员身份运行。建议使用OwinTestServer
。链接:如果您使用HttpSelfHostServer,您可以编写测试,只需更改url,测试就可以在您的开发/阶段服务器上运行。