首页 > Web开发 > 详细

asp.net mvc如何在单元测试中使用session

时间:2021-04-01 23:26:12      阅读:34      评论:0      收藏:0      [点我收藏+]

在单元测试中我们如果遇到需要使用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;
}

asp.net mvc如何在单元测试中使用session

原文:https://www.cnblogs.com/Shadow3627/p/14607732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!