栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在单元测试中设置HttpContext.Current.Session

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在单元测试中设置HttpContext.Current.Session

我们不得不

HttpContext
通过使用a
HttpContextManager
并从应用程序以及单元测试中调用工厂来进行模拟

public class HttpContextManager {    private static HttpContextbase m_context;    public static HttpContextbase Current    {        get        { if (m_context != null)     return m_context; if (HttpContext.Current == null)     throw new InvalidOperationException("HttpContext not available"); return new HttpContextWrapper(HttpContext.Current);        }    }    public static void SetCurrentContext(HttpContextbase context)    {        m_context = context;    }}

然后,将取代任何调用

HttpContext.Current
HttpContextManager.Current
并有机会获得同样的方法。然后,当您进行测试时,您还可以访问
HttpContextManager
并模拟您的期望

这是使用Moq的示例:

private HttpContextbase GetMockedHttpContext(){    var context = new Mock<HttpContextbase>();    var request = new Mock<HttpRequestbase>();    var response = new Mock<HttpResponsebase>();    var session = new Mock<HttpSessionStatebase>();    var server = new Mock<HttpServerUtilitybase>();    var user = new Mock<IPrincipal>();    var identity = new Mock<IIdentity>();    var urlHelper = new Mock<UrlHelper>();    var routes = new RouteCollection();    MvcApplication.RegisterRoutes(routes);    var requestContext = new Mock<RequestContext>();    requestContext.Setup(x => x.HttpContext).Returns(context.Object);    context.Setup(ctx => ctx.Request).Returns(request.Object);    context.Setup(ctx => ctx.Response).Returns(response.Object);    context.Setup(ctx => ctx.Session).Returns(session.Object);    context.Setup(ctx => ctx.Server).Returns(server.Object);    context.Setup(ctx => ctx.User).Returns(user.Object);    user.Setup(ctx => ctx.Identity).Returns(identity.Object);    identity.Setup(id => id.IsAuthenticated).Returns(true);    identity.Setup(id => id.Name).Returns("test");    request.Setup(req => req.Url).Returns(new Uri("http://www.google.com"));    request.Setup(req => req.RequestContext).Returns(requestContext.Object);    requestContext.Setup(x => x.RouteData).Returns(new RouteData());    request.SetupGet(req => req.Headers).Returns(new NamevalueCollection());    return context.Object;}

然后在单元测试中使用它,我在Test Init方法中调用它

HttpContextManager.SetCurrentContext(GetMockedHttpContext());

然后,您可以在上述方法中,将期望从Session中获得的预期结果添加到Web服务中。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号