asp.net-mvc - 如何在mvc中的 Controller 中对 session 变量进行单元测试

标签 asp.net-mvc unit-testing session-variables httpcontext

我正在对我的 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/

相关文章:

c# - 如何在 MVC3 中的回发时获取 View 模型的子集合?

asp.net-mvc - 在项目之间共享 URL 的优雅方式?

c# - 最小起订量 - 如果类吞噬异常,如何验证方法没有被调用

asp.net - .NET 母版页 session 状态变量未保存

java - 如何使用 session 从一个jsp页面访问另一个jsp页面的输入值?

asp.net - asp.net 中的表单例份验证 Cookie 值漏洞

c# - 无法在 cshtml 中使用内插字符串

java - 模拟和模拟虚拟服务有什么区别?

unit-testing - 单元测试或集成测试中是否存在Grails测试标准/GORM?

php - 如何将javascript值插入到php session 变量中