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;
    }
    
  • 相关阅读:
    HDU --1251
    POJ -- 2436
    POJ -- 3140
    POJ 3107
    POJ -- 2002
    POJ -- 1655
    lintcode154
    lintcode192
    lintcode582
    lintcode901
  • 原文地址:https://www.cnblogs.com/Shadow3627/p/14607732.html
Copyright © 2011-2022 走看看