• 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;
    }
    
  • 相关阅读:
    值得收藏的14款响应式前端开发框架
    简单几步把LOGO变字体
    7 款免费的 Metro UI 模板
    JPG渐进 & PNG/PNG24 交错测试
    你的钱,以后是放银行还是放支付宝?
    Bise IE6 在你的网站上加上它让IE滚蛋吧
    单例模式常见场景
    10 个最新的开发者工具
    大流量网站的底层系统架构
    DNS解析全过程及原理
  • 原文地址:https://www.cnblogs.com/Shadow3627/p/14607732.html
Copyright © 2020-2023  润新知