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

时间:2009-04-06 11:08:22

标签: .net asp.net asp.net-mvc abstraction

......绝对没有?

分别为 ASP.NET WebForms ASP.NET MVC 填充了哪些难题?

你能以某种方式创建一个使用System.Web.Abstractions的ASP.NET *基础应用程序,以便它可以在两种ASP.NET Web应用程序中使用吗?

在这种情况下,他们是如何将System.Web.Abstractions中的类重新调整回ASP.NET WebForms的?

你不能从命名空间中新建对象,所以它不能用于模拟,可以吗?

更新:很抱歉,我不知道测试HttpContext和其他构建ASP.NET对象的问题。但无论如何,谢谢你的解释。

2 个答案:

答案 0 :(得分:36)

命名空间包含用于包装ASP.NET核心类的类型(例如HttpSessionState)。

什么,你想知道为什么?

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

如果您曾经考虑过创建这些包装器,或者之前已经实现过一个或两个包装器,那么您就会知道该命名空间中包含了大量工作,而且我很高兴他们做到了这一点。

答案 1 :(得分:17)

确实是为了嘲笑。 - HttpContext是一个密封的类,不能(轻易)嘲笑。 HttpContextBase没有密封,我相信它的方法是虚拟的,使得模拟更容易。

虽然您无法新建HttpContextBase的实例(例如,在WebForms中使用),但您可以通过以下方式获取实例:

var ctx = new HttpContextWrapper(HttpContext.Current);