单元测试ASP.NET MVC应用程序 - 会话变量

时间:2011-10-04 06:00:37

标签: asp.net asp.net-mvc asp.net-mvc-3 unit-testing

我需要为我的应用程序创建一个单元测试stratergy。在我的ASP.NET MVC应用程序中,我将使用会话,现在我需要知道如何对使用Session的Action进行单元测试。我需要知道是否存在涉及Sessions的单元测试操作方法的框架。

1 个答案:

答案 0 :(得分:2)

如果你需要模拟会话,你做错了 :)部分MVC模式是动作方法不应该有任何其他依赖而不是参数。因此,如果您需要会话,请尝试“包装”该对象并使用模型绑定(您的自定义模型绑定器,不绑定来自POST数据,而是来自会话)。

这样的事情:

public class ProfileModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        if (bindingContext.Model != null)
            throw new InvalidOperationException("Cannot update instances");

        Profile p = (Profile)controllerContext.HttpContext.Session[BaseController.profileSessionKey];
        if (p == null)
        {
            p = new Profile();
            controllerContext.HttpContext.Session[BaseController.profileSessionKey] = p;
        }
        return p;
    }
}

不要忘记在应用程序启动时注册它,而不是像这样使用它:

public ActionResult MyAction(Profile currentProfile)
{
    // do whatever..
}

很好,完全可测试,享受:)