1: public class MockMvcHttpContext

   2: {

   3:     public Moq.Mock<System.Web.HttpContextBase> Context { get; set; }

   4:  

   5:     public Moq.Mock<System.Web.HttpRequestBase> Request { get; set; }

   6:  

   7:     public Moq.Mock<System.Web.HttpResponseBase> Response { get; set; }

   8:  

   9:     public System.Web.HttpCookieCollection Cookie { get; set; }

  10:  

  11:     public System.Web.Mvc.Controller Controller { get; set; }

  12:  

  13:     private System.Collections.Specialized.NameValueCollection _form;

  14:     public System.Collections.Specialized.NameValueCollection Form {

  15:         get

  16:         {

  17:             return _form;

  18:         }

  19:         set

  20:         {

  21:             _form = value;

  22:             this.Controller.ValueProvider = new System.Web.Mvc.FormCollection(value).ToValueProvider();

  23:         }

  24:     }

  25:     public System.Collections.Specialized.NameValueCollection Query { get; set; }

  26: }

  27:  

  28: public static class MvcTestExtensions

  29: {

  30:     public static MockMvcHttpContext SetupFullContext(this System.Web.Mvc.Controller controller)

  31:     {

  32:         return controller.SetupContext().SetupRequest().SetupResponse().SetupCookie().SetupForm().SetupQuerystring();

  33:     }

  34:  

  35:     public static MockMvcHttpContext SetupContext(this System.Web.Mvc.Controller controller)

  36:     {

  37:         

  38:         var context = new Moq.Mock<System.Web.HttpContextBase>();

  39:         controller.ControllerContext = new System.Web.Mvc.ControllerContext(context.Object, new System.Web.Routing.RouteData(), controller);

  40:         var obj = new MockMvcHttpContext()

  41:         {

  42:             Controller = controller,

  43:             Context=context

  44:         };

  45:         return obj;

  46:     }

  47:  

  48:     public static MockMvcHttpContext SetupRequest(this MockMvcHttpContext context)

  49:     {

  50:         if (context.Context == null)

  51:         {

  52:             throw new System.ArgumentNullException("context.Context");

  53:         }

  54:         var request = new Moq.Mock<System.Web.HttpRequestBase>();

  55:         context.Context.SetupGet(x => x.Request).Returns(request.Object);

  56:         context.Request = request;

  57:         return context;

  58:     }

  59:  

  60:     public static MockMvcHttpContext SetupResponse(this MockMvcHttpContext context)

  61:     {

  62:         if (context.Context == null)

  63:         {

  64:             throw new System.ArgumentNullException("context.Context");

  65:         }

  66:         var response = new Moq.Mock<System.Web.HttpResponseBase>();

  67:         context.Context.SetupGet(x => x.Response).Returns(response.Object);

  68:         context.Response = response;

  69:         return context;

  70:     }

  71:  

  72:     public static MockMvcHttpContext SetupCookie(this MockMvcHttpContext context)

  73:     {

  74:         if (context.Context == null)

  75:         {

  76:             throw new System.ArgumentNullException("context.Context");

  77:         }

  78:         var cookie = new System.Web.HttpCookieCollection();

  79:         if (context.Response != null)

  80:         {

  81:             context.Response.SetupGet(x => x.Cookies).Returns(cookie);

  82:         }

  83:         if (context.Request != null)

  84:         {

  85:             context.Request.SetupGet(x => x.Cookies).Returns(cookie);

  86:         }

  87:         context.Cookie = cookie;

  88:         

  89:         return context;

  90:     }

  91:  

  92:     public static MockMvcHttpContext SetupForm(this MockMvcHttpContext context)

  93:     {

  94:         if (context.Context == null)

  95:         {

  96:             throw new System.ArgumentNullException("context.Context");

  97:         }

  98:         

  99:         if (context.Request == null)

 100:         {

 101:             throw new System.ArgumentNullException("context.Request");

 102:         }

 103:         var form = new System.Collections.Specialized.NameValueCollection();

 104:         context.Request.SetupGet(x => x.Form).Returns(form);

 105:         context.Form = form;

 106:         return context;

 107:     }

 108:  

 109:     public static MockMvcHttpContext SetupQuerystring(this MockMvcHttpContext context)

 110:     {

 111:         if (context.Context == null)

 112:         {

 113:             throw new System.ArgumentNullException("context.Context");

 114:         }

 115:  

 116:         if (context.Request == null)

 117:         {

 118:             throw new System.ArgumentNullException("context.Request");

 119:         }

 120:         var query = new System.Collections.Specialized.NameValueCollection();

 121:         context.Request.SetupGet(x => x.QueryString).Returns(query);

 122:         context.Query = query;

 123:         return context;

 124:     }

 125: }

需要引入Moq库

 

useage:

controller.SetupFullContext()

Mvc Moq HttpContext的更多相关文章

  1. [转]ASP.NET Core / MVC 6 HttpContext.Current

    本文转自:http://www.spaprogrammer.com/2015/07/mvc-6-httpcontextcurrent.html As you know with MVC 6, Http ...

  2. ASP.NET MVC中HttpContext, HttpContextBase, HttpContextWrapper联系

    ttpContext HttpContext是最原始的ASP.NET Context. MVC的目的之一是能够单元测试.HttpContext没有base class,并且不是virtual,所以不能 ...

  3. MVC中HttpContext, HttpContextBase, HttpContextWrapper联系

    HttpContext // // 摘要: // 封装有关个别 HTTP 请求的所有 HTTP 特定的信息. public sealed class HttpContext : IServicePro ...

  4. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

    好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: --> 开篇:上一篇 ...

  5. MVC和Webform的比较和替换总结

    1.自定义控件,页面赋值可用HtmlHelper进行扩展 2.aspx的母版页可用Layout代替 3.webform的request,response方法在MVC中同样适应,只是类有点不同,例如表单 ...

  6. ASP.NET MVC:窗体身份验证及角色权限管理示例

    ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...

  7. MVC身份验证及权限管理

    MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...

  8. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

  9. MVC身份验证及权限管理(转载)

    from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供 ...

随机推荐

  1. SQLite 编译错误 - 试图加载格式不正确的程序

    刚开始用SQLite,刚开始写了一个小程序,连接数据库的时候出现了问题,提示试图加载格式不正确的程序, 原因是我当前工程的目标平台是X86,改成Any CPU之后问题就解决了.如下图:

  2. Android 为库(library)创建不同编译环境

    项目中需要导入库,一般有两种情况,一种是直接路径导入,一种是导入库的 aar 文件. 1. 设置库项目 1. 在库项目的 src 目录下设置 debug 目录,里面可以添加代码或者 res 文件夹. ...

  3. leetcode 75. 颜色分类 JAVA

    题目: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和 ...

  4. python 匿名函数 lambda 的使用

    在python中,lambda允许用户快速定义单行函数,当然用户也可以按照典型的函数定义完成函数.lambda的目的就是简化用户定义使用函数的过程. In [6]: s = lambda x: x+1 ...

  5. vmware安装——CentOS-6.5和Mysql

    1.新建虚拟机 2.安装centos6.5 3.centos设置 查看网络 4.vmware设置网络连接 关闭selinux [root@china ~]# vim /etc/selinux/conf ...

  6. JS:事件委托

    事件委托 事件流 事件流描述的是从页面中接收事件的顺序.---JS高级程序设计(第3版) DOM Level 2 Events规定的事件流有三个阶段:①事件捕获阶段.②处于目标阶段.③事件冒泡阶段 事 ...

  7. POJ 2389

    #include <iostream> #include <algorithm> #include <string> #define MAXN 300 using ...

  8. easyui tree扩展tree方法获取目标节点的一级子节点

    Easyui tree扩展tree方法获取目标节点的一级子节点 /* 只返回目标节点的第一级子节点,具体的用法和getChildren方法是一样的 */ $.extend($.fn.tree.meth ...

  9. Docker学习--docker的基本认识

    1.Docker 架构 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关系类似于 ...

  10. python 把一文件包含中文的字符写到另外文件乱码 UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position

    报错的代码是: file2 = open('target.txt','w')for line in open('test.txt'): file2.write(line)原因:文件编码不一致导致解决方 ...