那么使用如下代码便可以模拟出一个HttpContext了,这样依赖就不存在了。
//设置Cookie环境 Thread.GetDomain().SetData(".appPath", @"D:\Test"); Thread.GetDomain().SetData(".appVPath", "/"); TextWriter tw = new StringWriter(); string address = "http://www.sina.com.cn/"; HttpWorkerRequest wr = new MyWorkerRequest("login.aspx", "", tw, address); HttpContext.Current = new HttpContext(wr); |
其实说这个事情,本身并不是为了这个技巧,而是想借这个例子说明怎么去考虑层的职责。比如对HttpContext这个东西,因为你知道你现在设计的是Web程序,你直接使用了这个。但如果有一天同样的业务,让你做一个WinForm呢?HttpContext该怎么办?所以,这样一分析就知道 HttpContext这个东西肯定不属于逻辑层。
而如果你对逻辑层做单元测试的话,那么你必定会遇到上述问题。而一旦遇到这种问题,应该就说明了你的设计思路有问题,因为从逻辑本身来说,实现一个测试,我不应该需要借助任何的模拟。至于Mock这个东西,留给以后的篇幅吧。
相关链接: