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

发布于 2024-12-07 19:03:06 字数 106 浏览 0 评论 0原文

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

I need to create a unit test stratergy for my application. In my ASP.NET MVC applicationI will be using session, now i need to know how to unit test my Action that uses Session.. I need to know if there are framework for unit testing action method involving Sessions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

像你 2024-12-14 19:03:06

如果您需要模拟会话,您就做错了:) 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..
}

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

If you need to mock session, you are doing it wrong :) Part of the MVC patters is that action methods should not have any other dependencies than parameters. So, if you need session, try "wrap" that object and use model binding (your custom model binder, binding not from POST data, but from session).

Something like this :

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;
    }
}

dont forget to register it while application start, and than you could use it like this :

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

nice, fully testable, enjoy :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文