System.Web.Abstractions: 它有什么用处?

26

...绝对什么都没有吗?

它在ASP.NET WebForms和ASP.NET MVC分别填补了哪个难题的一部分?

您是否可以创建一个使用System.Web.Abstractions的ASP.NET *基础应用程序,以便它可以在两种类型的ASP.NET Web应用程序中使用?

如果是这样,在ASP.NET WebForms中如何将System.Web.Abstractions中的类进行适配?

您无法从该命名空间实例化对象,因此它不能用于模拟,是吗?

更新:抱歉我没有清楚地表达我知道测试HttpContext和其他构建ASP.NET对象的问题。但感谢好的解释。


7
完全出乎意料,但由于你的问题标题,现在我脑海中想起了艾德温·斯塔尔的《战争》。:( - Dan Atkinson
2个回答

37

命名空间包含旨在封装ASP.NET的核心类(如HttpSessionState)的类型。

你想知道为什么吗?

这些核心ASP.NET类中的许多是密封或静态的,这使得无法打破它们与代码之间的依赖关系。这意味着您无法模拟这些核心依赖项,从而使得测试ASP.NET代码变得更加困难。 因此,您可以通过HttpResponseWrapper来操作HttpResponse对象,而不是直接在代码中直接操作HttpResponse对象。在测试期间,您可以将其存根或进行模拟以控制HttpResponse对象的行为。

如果您曾经考虑过创建这些包装器或已经实现了其中一两个,那么您就会知道该命名空间中有大量的工作,我个人很高兴他们这样做了。


17

这确实是用于模拟的。HttpContext是一个密封类,不能(轻松地)进行模拟。HttpContextBase没有被密封并且我相信它的方法是虚拟的,使得模拟更加容易。

虽然你不能通过 new-up 来新建一个 HttpContextBase 实例(比如在 WebForms 中使用),但你可以通过以下方式获取一个实例:

var ctx = new HttpContextWrapper(HttpContext.Current);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接