0

我使用 ASP.NET(WebForm) 已经有一段时间了,但对 ASP.NET MVC 来说是新手。从我读过的许多文章中,在大多数情况下,控制器难以测试的原因是因为它们正在访问运行时组件:HttpContext(包括请求、响应......)。在控制器中访问 HttpContext 似乎很糟糕。

但是,我必须在某个地方访问这些组件,从 Request 中读取输入,通过 Response 将结果发回,并使用 Session 来保存一些状态变量。

那么如果我们不在控制器中访问它们,那么访问这些运行时组件的最佳位置在哪里呢?

4

3 回答 3

1

当您在控制器中调用模型方法时,Request 和 Response 对象携带相同的值或输出到相同的源。“页面”对这些对象来说很重要。

还有一件事,RequestSession对象Response可能不会在您的模型中直接引用,因此您可以使用它System.Web.HttpContext.Current来获取对象。它们的功能与从控制器调用的相同。

控制器是视图和模型之间的桥梁即使这些对象中没有任何响应或请求值,模型也应该工作,所以我会使用这些对象的值作为建模方法的常用参数,而不是引用它们模型内部。这是 MVC 概念的正确用法。

于 2012-04-07T10:50:24.427 回答
0

如果您真的必须从控制器访问这些对象,您总是可以将它们抽象出来并注入它们的模拟实例,以将您的测试隔离到控制器。

于 2012-04-07T11:24:33.590 回答
0

在 MVC 中,HttpContext 实际上是 HttpContextBase。直接使用这些类是完全可以的。如果您需要稍后测试您的控制器,您可以非常轻松地模拟这些类。

http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

我认为你想做的事情没有错。

在控制器中访问 HttpContext 似乎很糟糕。

不,不是,它只需要你考虑如何测试你的行为。如果你不测试,那么你可能甚至没有问题。我建议你测试。

于 2012-04-26T17:24:15.993 回答