26

... 绝对没有?

它分别为ASP.NET WebFormsASP.NET MVC解决了哪些难题?

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

在那种情况下,他们如何将 System.Web.Abstractions 中的类重新安装到 ASP.NET WebForms 中?

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

更新:抱歉不清楚我知道测试 HttpContext 和其他构建它的 ASP.NET 对象的问题。但无论如何,感谢您的良好解释。

4

2 回答 2

37

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

什么,你想知道为什么吗?

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

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

于 2009-04-06T11:40:20.087 回答
17

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

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

var ctx = new HttpContextWrapper(HttpContext.Current);
于 2009-04-06T11:39:49.073 回答