1 public class DataManager 2 { 3 public void GetData() 4 { 5 //如果在测试调试中进来, HttpContext.Current是空的,
HttpContext.Current.Response.Output.Write("addasdfdsfsfdsf");
6 } 7 } 8 [TestMethod()] 9 public void GetDataTest() 10 { 11 DataManager data = new DataManager(); 12 data.GetData(); 13 }
求详细解决办法。谢谢
我一般都是自己写一个替代类来解决。
就是自己定义一个HTTPCONTEXT类,比如MyHttpConttext,然后在站点中,凡是需要使用到HTTPCONTEXT的地方都使用自己的定义的类,这样就可以对数据进行拦截和模拟了。
朋友 你这个 MyHttpConttext 类是怎么实现的? 继承HttpContextBase?? 还是
@不不点点: 就自己随便写一个普通的类。把要用到的HTTPCONTEXT中的属性啊方法啊都重复一遍,而不是继承自httpcontextbase,那样就不如不写了。
当然,这样做的同时,最好也写一个MyHttpSession、MyHttpServer、MyHttpApplication等类。
比如,当使用HTTPCONTEXT获取Session对象的时候,都是返回自己定义的MyHttpSession对象,然后在当需要使用Session的内容的时候,则在MyHttpSession里实现这个功能,检测当前的HttpContext是否可用,可用则使用系统的,否则,则自定义一个集合实现。
@笨笨蜗牛: 其实,我这个方案就是强制性的添加一个代理类进来。本来程序和HttpContext之间是可以直接通讯的,我这样做的结果就是让程序调用自己写的代理类,再由代理类去调用具体的数据对象。
这样的好处是便于移植和调试,比如你可以把这样的模块运行在非Web环境(如桌面应用)而不需要重新写代码,坏处就是凭空多了一层代理,消耗了系统资源。
@笨笨蜗牛: 我想,当我们在乎这点系统资源的时候,那么就需要考虑是否用汇编语言写软件了。
@笨笨蜗牛: 哦 明白了, 谢谢哈。
@笨笨蜗牛: 是这样的,现在的功能实现方法已经写好可, 方法中用到了,HttpContext.current 按照你的这种方法。此时的HttpContext.current 对象是空的么?
@不不点点: 在MyHttpContext中也定义一个Current属性,返回一个静态成员对象,类型为自己。
我这个方案要求,凡是用到系统HttpContext\HttpSession等对象的地方必须使用自己定义的。
@笨笨蜗牛: 嗯,现在被需要测试的方法是不能改的, 我应该怎么办 把HttpContext.current 填充对象。
@不不点点: 或者走代码注入看吧,遇到这样的问题,是很麻烦,我对单元测试不是很熟悉。
@笨笨蜗牛: 很是郁闷啊。 目前项目已经完了 后写的单元测试。找了好多资料了。
关注学习了。。。