我正在对我的 Controller 进行单元测试。
在我的 Controller 方法之一中,我正在设置 session 变量:
public void Index()
{ Session["foo"] = "bar";
return View();
}
我如何对此进行单元测试?问题是测试时 Session 属性为 null。注入(inject)是不可能的,因为 Session 属性是只读的。
我不想使用任何第三方工具或模拟。
最佳答案
只是不要在您的 Controller 方法中使用 Session["foo"] 之类的东西。最佳实践是让操作方法不知道任何类似上下文的全局对象。你的 Action 方法需要的一切都应该以参数的形式提供给她。请注意,模型绑定(bind)的内置机制与此完全相同——您不使用 Request.Form[],而是让“幕后人员”将其作为参数传递给您的操作。
现在对于 session ,您可以执行相同的操作 - 编写非常简单的 ValueProvider,它将知道如何识别您想要从 session 中填充的参数,然后您就完成了。在生产中,您的操作将与 session 一起工作,在测试中,您不能简单地将您想要的任何值作为参数传递给它们。
要获得灵感,请查看此 http://www.prideparrot.com/blog/archive/2012/7/how_to_create_a_custom_session_value_provider
关于asp.net-mvc - 如何在mvc中的 Controller 中对 session 变量进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12423360/