zoukankan      html  css  js  c++  java
  • asp.net mvc如何在单元测试中使用session

    在单元测试中我们如果遇到需要使用session的场景,可以使用Moq做如下处理:
    创建一个类:MockHttpSession

    public class MockHttpSession : HttpSessionStateBase
    {
        Dictionary<string, object> m_SessionStorage = new Dictionary<string, object>();
    
        public override object this[string name]
        {
            get { return m_SessionStorage[name]; }
            set { m_SessionStorage[name] = value; }
        }
    }
    

    在测试中加入如下代码:

    [TestMethod]
    public void GetSilderCodeImage()
    {
        var mock = new Mock<ControllerContext>();
        var mockSession = new MockHttpSession();
        mock.Setup(p => p.HttpContext.Session).Returns(mockSession);
        controller.ControllerContext = mock.Object;
    
        FileResult result = controller.GetSilderCodeImage() as FileResult;
        Assert.IsNotNull(result);
        Assert.IsNotNull(controller.Session["offsetX"]);
    }
    

    Moq还可以模拟各种HttpContext中的对象:

    public static HttpContextBase FakeHttpContext()
    {
        var context = new Mock<HttpContextBase>();
        var request = new Mock<HttpRequestBase>();
        var response = new Mock<HttpResponseBase>();
        var session = new MockHttpSession();
        var server = new Mock<HttpServerUtilityBase>();
    
        context.Setup(ctx => ctx.Request).Returns(request.Object);
        context.Setup(ctx => ctx.Response).Returns(response.Object);
        context.Setup(ctx => ctx.Session).Returns(session);
        context.Setup(ctx => ctx.Server).Returns(server.Object);
    
        return context.Object;
    }
    
  • 相关阅读:
    1722 最优乘车 1997年NOI全国竞赛
    tarjan算法详解
    codevs 原创抄袭题 5969 [AK]刻录光盘
    Kosaraju算法详解
    1722 最优乘车 未完成
    codevs原创抄袭题 5960 信使
    1405 奶牛的旅行
    android 管理Bitmap内存
    Dynamics CRM 2013 初体验(3):新增加的功能
    在android画面切换时设置跟随变动的小圆圈
  • 原文地址:https://www.cnblogs.com/Shadow3627/p/14607732.html
Copyright © 2011-2022 走看看