尽可能摆脱对HttpContext的依赖

今天主要谈论HttpContext的依赖问题。

在ASP.NET中进行单元测试的天敌便是HttpContext,它是ASP.NET的核心,极端复杂,却无法进行 Mock1——可见微软能够写出那么庞大的ASP.NET框架真不那么容易。现在这个状况改善了不 少,因此大家已经可以使用System.Web.Abstractions.dll了,这个程序集中提供了对于HttpContext的抽 象,也就是HttpContextBase抽象类。因此在ASP.NET MVC中,各种组件均依赖于HttpContextBase而不是 HttpContext。这是一个优秀的做法,大家以后可以尽可能地摆脱HttpContext了。

不过这似乎又是一个悖论。虽然已经可以对HttpContext进行Mock(这点增强了可测试性),但是过度 依赖HttpContext对于单元测试来说也是一个伤害。这是HttpContext对象的天性所致:它实在太复杂了。 您应该已经察觉到,这是个集万千宠爱于一身的对象,从请求,回复,应用程序,缓存……几乎包含了 Web应用程序需要的所有信息。如果要测试一个依赖于HttpContext的方法,您势必要为HttpContext的 Mock对象填充各种信息——其复杂程度视业务而定。而且,Mock关注的是“行为”,也就是说它关注的是 做一件事情所使用“路径”。那么如果做一件事情可以采用多个路径又会怎样?是否需要在测试之前准备 好所有的路径,并且验证被测试的代码“采用了,并仅仅采用了其中一条路径”?因此,Stub慢慢进入人 们的视线。Stub关注的是“状态”……这就是另一个话题了,还会涉及到采用Record & Replay还是 Arrange-Act-Assert方式来进行单元测试,暂且不提。

之前谈到对视图进行单元测试时,老赵曾经谈起在视图中应该只使用ViewData中的数据。这不是第一 次说起要放弃HttpContext了,自从有了“抽象”这一有利武器后,一切“不和谐”因素都能够被分离。 试想在MVP模式中,View和Presenter都使用各自的抽象进行交互,一切Web控件,HttpContext等对象都不 复存在了,大家眼中只有“数据”和“模型”。同样,在ASP.NET MVC的Action方法中,也不应该使用 HttpContext,这是基于良好的“可测试性”而考虑的。您可能会想,现在的HttpContextBase对象已经可 以Mock了啊。没错,它的确“可以”,但是这样做会引起单元测试代码的膨胀,因为测试代码中的相当部 分必须关注在测试数据的准备,而不是被测试的功能上。对于一个Action方法来说,它关注的应该是用户 与业务逻辑的交互,而不是“如何把HTTP请求转化为可用的数据”。其实说到底,还是要“分离关注点” 。

在ASP.NET MVC中负责“转化数据”的层次为Model Binder。关于这一点,现有的“示例”大都关注把 Form或QueryString中的数据转化为Action参数上,不过Model Binder可用的地方其实更多。例如在《最 佳实践》的代码中,原本AccountController的Delete方法实现如下:

public ActionResult Delete(string userName)
{
  this.MiddleTier.UserManager.Delete(userName);

  Uri urlReferrer = this.Request.UrlReferrer;
  return this.Redirect(urlReferrer.ToString());
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 对象
, 测试
, httpcontext赋值
, 单元测试
, 被共享 如何摆脱
, httpcontext
, 依赖分离
一个
如何摆脱酒精依赖、如何摆脱手机依赖症、摆脱手机依赖症app、摆脱依赖的议论文、摆脱依赖的名人事例,以便于您获取更多的相关知识。

时间: 2024-08-03 01:34:19

尽可能摆脱对HttpContext的依赖的相关文章

艾伟:尽可能摆脱对HttpContext的依赖

我们继续<ASP.NET MVC单元测试最佳实践>,今天主要谈论HttpContext的依赖问题. 在ASP.NET中进行单元测试的天敌便是HttpContext,它是ASP.NET的核心,极端复杂,却无法进行Mock1--可见微软能够写出那么庞大的ASP.NET框架真不那么容易.现在这个状况改善了不少,因此大家已经可以使用System.Web.Abstractions.dll了,这个程序集中提供了对于HttpContext的抽象,也就是HttpContextBase抽象类.因此在ASP.NE

巨人网络正逐渐摆脱《征途》依赖症

史玉柱 退休之后,"中国网游六君子"之一的 巨人网络 集团有限公司 (下称"巨人",GA.NYSE)正逐渐摆脱<征途>"依赖症",相继推出仙侠题材网游<仙侠世界>.智能化网游<江湖>等产品,近日更涉足一个全新的网游领域――军事网游. 日前,中国首款军事网游――<光荣使命OL>(Online,网络版),由南京军区和巨人旗下的光荣使命网络科技有限公司(下称"光荣使命公司")正式对外发

苹果摆脱对三星的依赖 前路艰难

硅谷网讯 苹果公司已发现, 摆脱对三星的依赖是一项十分艰巨的任务.例如,苹果公司很难找到除三星以外的厂商,为其代工用于iPad和iPhone的处理器芯片.在连续几年因技术原因而延期之后,台积电一名高管本周表示,台积电本月与苹果公司签署了协议,将从 2014年开始为其代工处理器.而此前,台积电的制造工艺存在一些小问题,导致芯片无法满足苹果公司的处理速度和功耗标准. 不过根据台积电高管的说法,尽管苹果公司与台积电达成了合作协议,但三星仍将是苹果公司未来一年主要的处理器芯片供应商. 亦敌亦友 目前,苹

巨人网络 集团有限公司正逐渐摆脱《征途》“依赖症”

相继推出仙侠题材网游<仙侠世界>.智能化网游<江湖>等产品,近日更涉足一个全新的网游领域――军事网游. 日前,中国首款军事网游――<光荣使命OL>(Online,网络版),由南京军区和巨人旗下的光荣使命网络科技有限公司(下称"光荣使命公司")正式对外发布. 早在2011年,由南京军区和光荣使命公司研发的我军首款军事游戏<光荣使命>,就被配发全军,并被列入我军训练科目.彼时,还是单机版游戏.此次升级为<光荣使命OL>,拥有更精彩

摆脱 Wi-Fi 依赖,iOS 8 支持 P2P AirPlay 功能

摘要: 很多 iOS 8 贴心小功能的光芒都被隐藏在了那几个明星特色之后,新的 AirPlay 就是这样一个 看起来不怎样但是能提升生活质量 的小更新. 现阶段,用户需要将设备都连在同一个局域网下 很多 iOS 8 贴心小功能的光芒都被隐藏在了那几个明星特色之后,新的 AirPlay 就是这样一个 "看起来不怎样但是能提升生活质量" 的小更新. 现阶段,用户需要将设备都连在同一个局域网下方能将 iPad 或者 iPhone 上的内容 AirPlay 到大屏幕上.但在 iOS 8 中,你

使用ASP.NET Abstractions增强ASP.NET应用程序的可测试性

概述 在阅读本文之前,兄弟们请先注意两点: 我们现在谈的是传统ASP.NET应用程序的可测试性,而不是ASP.NET MVC应用程序的可测试 性. 我们现在谈的是"增强",而不是说传统ASP.NET应用程序做不到良好的可测试性,一切 皆在人为. 关于可测试性的重要性,老赵觉得已经不需要再过多强调了.如果您想要获得高生产力, 为代码编写单元测试似乎已经是必经之路了.不过可惜的是,ASP.NET应用程序给人的感觉, 始终是对可测试性不太友好,其最重要的原因之一在于对HttpContext对

设计:小即是美

博尔赫斯说:"写散文体的短文--寓言.神话.短故事--给了我某种神秘的满足.想起这些篇章,就仿佛想到硬币:实在.结实.闪光的小物体,更多的东西的样品."显然,小物体之美,让博尔赫斯着迷. 同样,在软件设计领域里,小的设计同样让我着迷.这里所谓的"小",并非绝对的小,而是强调一种恰如其分的设计哲学.在开发过程中,每一次迭代的目标不宜设立过大,需小步前行,避免过度设计.在设计开发时,整个系统最好由松散耦合的细小模块组成.这些细小模块由于功能相对独立而单一,因而更易于理解

岳阳林纸募投项目成亏损主源依赖大额政府补贴化险为夷

2013年公司的政府补助数额 同比增长175%■本报记者 何文英3月25日,岳阳林纸(600963,股吧)公布2013年年报.报告期内,公司实现营业收入66亿元,同比微增1.03%:实现净利润1937万元,实现扭亏:扣除非经常性损益的净利润为-1.69亿元,同比亏损幅度有所减小.值得注意的是,公司的募投项目非但没有贡献利润,反而成为亏损的主要来源.募投项目成亏损大户2011年2月,岳阳林纸实施了10配3的配股计划,募集资金总额14.3亿元,用于收购泰格林纸旗下骏泰浆纸100%股权.增加骏泰浆纸注

Facebook过度依赖症:应用程序商们尝试逃离

寄生在这个全球最大社交网络上的应用程序商们患上了"Facebook过度依赖症",Zynga们正开始尝试逃离. 文|CBN记者 骆轶航 制图|李婷婷 "如果未来我们不能与Facebook维持良好的关系,我们的业务会遭受重创."这是Zynga招股书中有关商业风险的第一句话,它揭示了这家社交游戏公司与Facebook之间复杂而危险的关系. 市场确实没有过度追捧所谓的"Facebook效应".2011年12月16日,Zynga IPO几分钟之后就跌破了发