Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用HttpServer或HttpSelfHostServer对Web API进行单元测试_C#_Unit Testing_Asp.net Web Api_Self Hosting - Fatal编程技术网

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

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”标识的上下文中执行。这远非理想。如果您想从构建脚本

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


只是想知道有什么区别,哪种技术适合做什么,这些选项是否有任何限制。

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

出于若干原因:

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

  • Self-host需要以提升的权限运行,因此您的测试需要在“admin”标识的上下文中执行。这远非理想。如果您想从构建脚本或PowerShell执行测试,这尤其麻烦,因为这些过程也必须以提升的权限启动。此外,这必须发生在您测试的任何服务器上

  • 在self-host中,您最终测试的是给定操作系统的网络堆栈,这实际上是不应该测试的,因为它可能在不同的环境中有所不同(开发、登台、QA、生产等等)。例如,给定的端口可能不可用。因此,为了让测试运行,您可能会在不同的机器上进行不必要的调试工作

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


您不需要管理员权限即可始终运行self-host。您必须添加
config.HostNameComparisonMode=System.ServiceModel.HostNameComparisonMode.Exact以非管理员身份运行。建议使用Owin
TestServer
。链接:如果您使用HttpSelfHostServer,您可以编写测试,只需更改url,测试就可以在您的开发/阶段服务器上运行。