首页 新闻 会员 周边

asp.net 单元测试中,HttpContext 对象为空,求详细解决办法。谢谢

0
悬赏园豆:20 [已解决问题] 解决于 2012-04-17 09:59
 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 }

求详细解决办法。谢谢

不不点点的主页 不不点点 | 初学一级 | 园豆:65
提问于:2012-04-12 09:56
< >
分享
最佳答案
0

我一般都是自己写一个替代类来解决。

就是自己定义一个HTTPCONTEXT类,比如MyHttpConttext,然后在站点中,凡是需要使用到HTTPCONTEXT的地方都使用自己的定义的类,这样就可以对数据进行拦截和模拟了。

收获园豆:20
无之无 | 大侠五级 |园豆:5095 | 2012-04-12 10:05

朋友  你这个 MyHttpConttext 类是怎么实现的? 继承HttpContextBase?? 还是

不不点点 | 园豆:65 (初学一级) | 2012-04-12 10:07

@不不点点: 就自己随便写一个普通的类。把要用到的HTTPCONTEXT中的属性啊方法啊都重复一遍,而不是继承自httpcontextbase,那样就不如不写了。

当然,这样做的同时,最好也写一个MyHttpSession、MyHttpServer、MyHttpApplication等类。

比如,当使用HTTPCONTEXT获取Session对象的时候,都是返回自己定义的MyHttpSession对象,然后在当需要使用Session的内容的时候,则在MyHttpSession里实现这个功能,检测当前的HttpContext是否可用,可用则使用系统的,否则,则自定义一个集合实现。

无之无 | 园豆:5095 (大侠五级) | 2012-04-12 10:57

@笨笨蜗牛: 其实,我这个方案就是强制性的添加一个代理类进来。本来程序和HttpContext之间是可以直接通讯的,我这样做的结果就是让程序调用自己写的代理类,再由代理类去调用具体的数据对象。

这样的好处是便于移植和调试,比如你可以把这样的模块运行在非Web环境(如桌面应用)而不需要重新写代码,坏处就是凭空多了一层代理,消耗了系统资源。

无之无 | 园豆:5095 (大侠五级) | 2012-04-12 11:02

@笨笨蜗牛: 我想,当我们在乎这点系统资源的时候,那么就需要考虑是否用汇编语言写软件了。

无之无 | 园豆:5095 (大侠五级) | 2012-04-12 11:03

@笨笨蜗牛: 哦 明白了, 谢谢哈。

不不点点 | 园豆:65 (初学一级) | 2012-04-12 11:08

@笨笨蜗牛: 是这样的,现在的功能实现方法已经写好可, 方法中用到了,HttpContext.current 按照你的这种方法。此时的HttpContext.current 对象是空的么?

不不点点 | 园豆:65 (初学一级) | 2012-04-12 11:10

@不不点点: 在MyHttpContext中也定义一个Current属性,返回一个静态成员对象,类型为自己。

 

我这个方案要求,凡是用到系统HttpContext\HttpSession等对象的地方必须使用自己定义的。

无之无 | 园豆:5095 (大侠五级) | 2012-04-12 11:13

@笨笨蜗牛: 嗯,现在被需要测试的方法是不能改的, 我应该怎么办 把HttpContext.current 填充对象。

不不点点 | 园豆:65 (初学一级) | 2012-04-12 11:51

@不不点点: 或者走代码注入看吧,遇到这样的问题,是很麻烦,我对单元测试不是很熟悉。

无之无 | 园豆:5095 (大侠五级) | 2012-04-12 15:26

@笨笨蜗牛: 很是郁闷啊。 目前项目已经完了 后写的单元测试。找了好多资料了。

不不点点 | 园豆:65 (初学一级) | 2012-04-12 16:43
其他回答(1)
0

关注学习了。。。

KivenRo | 园豆:1734 (小虾三级) | 2012-04-12 14:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册