前篇提到过由于我们已经有了一个现成的平台,现在要对其进行单元测试的补完。而在这个过程中,就出现了HttpContext这类东西,其依附于一个host环境,对单元测试的自动化是一个很大的阻碍。
对于HttpContext,如果没有一个web托管环境,其中的Request和Response等只读属性根本就无法造出来。而如果要搭建一个 web托管环境,不仅为测试带来了干扰(因为要确定是否是托管环境的问题),而且给测试的自动化带来了不方便。那么怎么去解决这个问题呢?
在MSDN中我们可以查到一个叫SimpleWorkerRequest的东西,这个东西的提供了一个简单的 System.Web.HttpWorkerRequest的实现,使得我们可以在IIS之外托管ASP.NET应用程序。而当我们使用 reflector来查看这个东西的源码的时候,发现其中的一些方法很有趣:
1 [ComVisible(false), AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] 2 public class SimpleWorkerRequest : HttpWorkerRequest 3 { 4 //... 5 6 public override string GetHttpVerbName() 7 { 8 return "GET"; 9 } 10 11 public override string GetHttpVersion() 12 { 13 return "HTTP/1.0"; 14 } 15 16 public override string GetLocalAddress() 17 { 18 return "127.0.0.1"; 19 } 20 21 public override int GetLocalPort() 22 { 23 return 80; 24 } 25 26 //... 27 } |
这果然是一个简单的实现啊,把IP地址,Http版本,端口等全部硬编码了。