我需要为我的应用程序创建一个单元测试stratergy。在我的ASP.NET MVC应用程序中,我将使用会话,现在我需要知道如何对使用Session的Action进行单元测试。我需要知道是否存在涉及Sessions的单元测试操作方法的框架。
答案 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..
}
很好,完全可测试,享受:)