如何在MVC中的控制器中对会话变量进行单元测试

Arv*_*att 3 asp.net-mvc unit-testing session-variables httpcontext

我正在对控制器进行单元测试。

在我的一种控制器方法中,我正在设置会话变量:

public void Index()
{       Session["foo"] = "bar";
        return View();
}
Run Code Online (Sandbox Code Playgroud)

如何对此进行单元测试?问题是测试时Session属性为null。由于Session属性为只读,因此无法进行注入。

我不想使用任何第三方工具或嘲笑。

rou*_*uen 5

只需不要在控制器方法中使用Session [“ foo”]之类的东西。最佳实践是使操作方法不了解任何类似上下文的全局对象。您的操作方法需要的所有内容都应以参数的形式提供给她。请注意,模型绑定的内置机制与之完全一样-您不使用Request.Form [],而是让“幕后某人”将其作为参数传递给您的操作。

现在,对于会话,您可以执行相同操作-为您编写一个非常简单的ValueProvider,它将知道如何识别要从会话中填充的参数,然后就完成了。在生产中,您的操作将与会话配合使用,在测试中,您不能简单地将您想要的任何值作为参数传递给它们。

为了获得灵感,请查看此http://www.prideparrot.com/blog/archive/2012/7/how_to_create_a_custom_session_value_provider