在模拟的 HttpContextBase 上设置属性

2024-04-24

我正在开发一个 ASP.NET MVC 应用程序,并尝试针对控制器操作编写一些单元测试,其中一些操作 HttpContext 上的属性,例如 Session、Request.Cookies、Response.Cookies 等。在弄清楚如何“排列、操作、断言”时遇到一些麻烦...我可以看到排列和断言...但是当模拟的 HttpContextBase 的所有属性都已设置时,我无法弄清楚如何对模拟的 HttpContextBase 的属性进行“操作”只有吸气剂。我不能set我的控制器操作中的模拟上下文中的任何内容......所以它看起来不是很有用。我对模拟相当陌生,所以我确信我缺少一些东西,但对我来说,我应该能够创建一个模拟对象,我可以在测试控制器操作的上下文中使用它,这似乎是合乎逻辑的实际上可以set属性值,然后断言它们仍然是我设置的值,或者类似的东西。我缺少什么?

    public static HttpContextBase GetMockHttpContext()
    {
        var requestCookies = new Mock<HttpCookieCollection>();
        var request = new Mock<HttpRequestBase>();
        request.Setup(r => r.Cookies).Returns(requestCookies.Object);
        request.Setup(r => r.Url).Returns(new Uri("http://example.org"));

        var responseCookies = new Mock<HttpCookieCollection>();
        var response = new Mock<HttpResponseBase>();
        response.Setup(r => r.Cookies).Returns(responseCookies.Object);

        var context = new Mock<HttpContextBase>();

        context.Setup(ctx => ctx.Request).Returns(request.Object);
        context.Setup(ctx => ctx.Response).Returns(response.Object);
        context.Setup(ctx => ctx.Session).Returns(new Mock<HttpSessionStateBase>().Object);
        context.Setup(ctx => ctx.Server).Returns(new Mock<HttpServerUtilityBase>().Object);
        context.Setup(ctx => ctx.User).Returns(GetMockMembershipUser());
        context.Setup(ctx => ctx.User.Identity).Returns(context.Object.User.Identity);
        context.Setup(ctx => ctx.Response.Output).Returns(new StringWriter());

        return context.Object;
    }

不确定是否有人感兴趣,但我已经使用 Rhino Mocks(我选择的武器)将 Moq FakeHttpContext 转换为一个。

public static HttpContextBase FakeHttpContext()
        {
            var httpContext = MockRepository.GenerateMock<HttpContextBase>();
            var request = MockRepository.GenerateMock<HttpRequestBase>();
            var response = MockRepository.GenerateMock<HttpResponseBase>();
            var session = MockRepository.GenerateMock<HttpSessionStateBase>();
            var server = MockRepository.GenerateMock<HttpServerUtilityBase>();
            var cookies = new HttpCookieCollection();
            response.Stub(r => r.Cookies).Return(cookies);
            request.Stub(r => r.Cookies).Return(cookies);
            request.Stub(r => r.Url).Return(new Uri("http://test.com"));

            httpContext.Stub(x => x.Server).Return(server);
            httpContext.Stub(x => x.Session).Return(session);
            httpContext.Stub(x => x.Request).Return(request);
            httpContext.Stub(x => x.Response).Return(response);
            var writer = new StringWriter();
            var wr = new SimpleWorkerRequest("", "", "", "", writer);
            System.Web.HttpContext.Current = new System.Web.HttpContext(wr);
            return httpContext;

        }

单元测试中的用法为

_httpContext = FakeHttpContext();
var cookieManager = new CookieManager(_httpContext);
string username = cookieManager.GetUsername();
_httpContext.AssertWasCalled(hc => { var dummy = hc.Request; });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在模拟的 HttpContextBase 上设置属性 的相关文章

  • 将 MVC 站点部署到 IIS 会导致找不到默认共享部分视图

    我有一个可以在本地 IIS 上完美运行的网站 我的所有页面都使用默认的共享部分视图 这称为预期 Layout cshtml 该视图放置在我的共享文件夹中 这可以在这里看到 正如我所期望的那样 这非常有效 不过 我现在发布了我的网站 然后 我
  • Log4net不会将日志写入日志文件

    我使用 Log4net 创建了一个简单的场景 但我的日志附加程序似乎不起作用 因为消息没有添加到日志文件中 我将以下内容添加到 web config 文件中
  • 我无法使 ValidateInput(False) 工作 - 从客户端检测到潜在危险的 Request.Form 值

    我尝试了很多组合 但无法在此代码块上关闭验证 ValidateInput false public ActionResult aSavePageCopy aLoggedIn int id Convert ToInt32 Request Fo
  • 如何将 Razor 视图转换为字符串?

    我想使用我的 Razor 视图作为某种发送电子邮件的模板 所以我想将我的模板 保存 在视图中 将其作为字符串读入控制器 进行一些必要的替换 然后发送它 我有有效的解决方案 我的模板作为 HTML 页面托管在某处 但我想将其放入我的应用程序中
  • 我的 Razor 视图中出现奇怪的自动命名空间导入

    今天我注意到 例如 System 和 System Web Security 已导入到我的所有 razor 视图中 尽管我没有主动导入它们 我检查了 using指令 web config 编辑 也是全局 web config 添加全局导入
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 将视图文件作为资源嵌入二进制文件中

    我正在尝试创建一个带有少量控制器的 Net 库 并且我想在多个 Web 项目中重用它们 我已经完成一半了 但我遇到的问题是 每当我将库添加到新的 Web 项目时 我需要将所有相应的视图文件单独复制到新项目中 每当我更新库时 我都需要再次重复
  • 运行测试项目时自动启动ASP.MVC项目

    我正在尝试为我的 ASP 网站设置一个测试项目 对于某些测试 我想使用 selenium 来执行端到端测试 因此 我的网站必须运行 以便测试可以访问该网站 运行测试时如何启动我的网站项目 请参考以下链接 我相信这是可能的 但会有点棘手 这些
  • MVC3 Controller 文件夹不会出现在 URL 中

    这只是一个例子 我不知道如何让它工作 在我的 MVC3 控制器文件夹中 如果我添加一个名为 Admin 的新文件夹 并添加一个带有操作 Index 的控制器 News 则当您尝试打开该 url 404 时 您会收到服务器错误 http ur
  • 我可以在 Windows 服务中托管(自托管)WCF 服务并通过 http 公开它吗?

    我是 WCF 新手 这可能吗 如果通过外部 Web 应用程序使用它 最好使用 IIS 和 http 即由 ASP NET MVC 应用程序托管的服务 吗 是的 您可以在 Windows 服务中托管 WCF 服务 http msdn micr
  • 防止更新 ASP.NET MVC 和实体框架中未更改的值

    我正在使用 ASP NET MVC 和实体框架 我有一个 编辑人员 网页 可以在其中编辑人员的字段 然后在回发操作中 我使用以下代码 var person objectCtx Persons Where s gt s Id id First
  • 如何找出 ModelState 的哪个键有错误

    当 ModelState IsValid 为 false 时 如何确定 ModelState 中的哪些键包含错误 通常我只需将鼠标悬停在 ModelState Values 列表中 逐项检查错误计数 gt 0 但现在我正在处理一个包含一些复
  • 将跟踪消息获取到来自控制器的失败请求跟踪中

    在 ASP NET MVC Preview 5 上 我们无法从全局或控制器获取任何跟踪消息以显示在页面 视图 或失败请求跟踪 FREB 中 这些调用都不能在控制器操作中工作 HttpContext Trace Write hello Sys
  • 新 ASP.NET MVC 3 站点的 Razor 与 Webforms 视图引擎

    剃刀更漂亮 而且是新的 因此很酷 Webforms 是我已经熟悉的东西 当然 我毫无疑问会去学习新东西 Razor 但我听说有两个令我担心的缺点 无法轻松重用现有的 Web 表单控件 在极少数情况下 我可能需要拖动一些东西 我会重申 罕见
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • MVC - 没有具有“IEnumerable”类型键的 Viewdata 项目

    我是 MVC 和 ASP NET 的新手 希望学习一些知识 因此我尝试制作一些简单的应用程序来了解细节 好吧 我正在尝试制作一个下拉框显示书籍列表 其中显示书名但发布 book id 主键 我得到的错误是 不存在键为 IEnumerable
  • 如何进入system.web.mvc

    有谁知道我如何进入system web mvc 我收到隐藏在 System Web Mvc DefaultModelBinder CreateModel 方法中的错误 无法创建抽象类 并且我无法判断代码的哪一部分导致了问题 有人建议我可以从
  • 表单帖子上的 asp.net mvc 编码

    我在我的 asp net mvc 表单 带有文本区域的 nicedit 中使用富文本编辑器 当我在帖子上提交表单时 因为它不是 html 编码的 我收到以下消息 从客户端检测到潜在危险的 Request Form 值 如何对 post 上的

随机推荐

  • Markdown 所见即所得编辑器和预览在同一文本区域中[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我寻找一个编辑器来编写 Markdown 语法并在同一文本区域中预览 例如引导所见即所得HTML5 ht
  • Django Crispy-forms - 自定义按钮

    我的 django crispy form 中有两个按钮 self helper add input Submit submit Submit self helper add input Button cancel Cancel 提交按钮工
  • !r 在 str() 和 repr() 中做什么?

    根据Python 2 7 12 文档 https docs python org 2 tutorial inputoutput html fancier output formatting s apply str and r apply r
  • 预加载背景图像

    我正在构建一个循环显示 3 个不同背景的页面 每 750 毫秒更改一次 为此 我在主体中添加了一个带有相关背景图像的类 并使用 JS 进行了更改 对于第一次循环 它们会闪烁 因为图像必须加载 所以它不会立即出现 因此 我可以使用任何方法来预
  • 使用#selector 传递参数

    我是 Swift 的初学者 我正在尝试通过通知中心启动一个功能 ViewController swift 中的观察者调用函数reload override func viewDidLoad super viewDidLoad Notific
  • 使用 Gson 反序列化 JSON 时引用父对象

    给定以下 JSON authors name Stephen King books title Carrie title The Shining title Christine title Pet Sematary 这个对象结构 publi
  • Tymon\JWTAuth::toUser 错误:需要令牌

    我有一个 Larvel API 它使用 Tymon JWTAuth 来验证用户身份 它运行良好 由于某些原因 我还有一条不受保护的路线web php Route get myroute MyController mymethod MyCon
  • 如何在flutter中解析没有key的JSON

    我想解析一个 JSON 但这个 JSON 没有键值 仅仅是价值 我尝试创建课程但不起作用 错误是类型 List 不是类型 Map 的子类型 我尝试解析它们在 json 中占据的位置 例如 json 0 但我对此不确定 提前致谢 Json P
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 单击“保存”按钮后的 WPF 数据绑定

    我有一个应用程序和一个设置窗口 其中 TabControl 包含几个 TabItems 它们每个都有一些字段 文本框 这些字段数据绑定到同一个 Singleton 对象 仅在单击 保存 按钮后 是否有任何优雅且类似 WPF 的数据绑定方式
  • iOS 7 - 呈现模式视图控制器时收到警告消息

    使用 iOS 7 编译和运行 在呈现模式视图控制器时 我收到警告消息 不鼓励在分离视图控制器上呈现视图控制器 我在使用 iOS 6 或更早版本时从未遇到过问题 任何人都可以显示在呈现模式视图控制器时是否有任何更改吗 SearchViewCo
  • 如何向打开 Chrome 控制台的用户显示警告,就像 Facebook 和 Blockchain 那样?

    当我在 Facebook 和 Blockchain 等网站上打开控制台时 我收到如下警告 我想知道如何在我的网站上执行此操作 显示警告 告诉用户这很危险 他不应该在那里粘贴任何内容 您可以设置 console log 消息的样式 conso
  • 当我尝试移动 Pygame 时,玩家回到初始位置

    当我移动玩家时 当我按住右箭头时 他会移动 10 个像素 当我释放按键时 他会返回到初始位置 顺便说一句 你不需要告诉我当我按右时他会向左移动 我知道 这是代码 import pygame pygame init WIDTH 1000 HE
  • 为什么 Java 中不能抛出和捕获对象? [复制]

    这个问题在这里已经有答案了 可能的重复 你可以在 Java 中添加什么 https stackoverflow com questions 5749898 what can you throw in java 为什么我不能在 Object
  • 如何将音频从浏览器流式传输到 WebRTC 本机 C++ 应用程序

    到目前为止 我已成功运行以下示例 WebRTC 原生 C 到浏览器视频流示例 http sourcey com webrtc native to browser video streaming example 该示例展示了如何将视频从本机
  • React Native - 如何查看 AsyncStorage 中存储的内容?

    我将一些项目保存到AsyncStorage在 React Native 中 我使用 chrome 调试器和 iOS 模拟器 不使用 React Native 使用常规 Web 开发localStorage 我能够看到存储的localStor
  • 您能解释一下流的概念吗?

    我知道流是字节序列的表示 每个流都提供了向其给定的后备存储读取和写入字节的方法 但流的意义何在 为什么我们与之交互的不是后备存储本身 不管出于什么原因 这个概念并不适合我 我读过很多文章 但我想我需要一个类比或其他东西 选择 流 这个词是因
  • Xcode 附加到进程不显示 NSLog

    我刚刚开始使用 Apple Watch 我找到了来自 五分钟观察套件 http www fiveminutewatchkit com blog category Xcode 让 iOS 应用程序和手表套件应用程序都在模拟器中运行 并且两个进
  • mongod,mac os x - rlimits警告[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在我的 mac os x 10 8 上使用 mongo 昨天突然在我的日志中出现了这个警告 当启动 shell 时它也出现了 警告 软限制太低
  • 在模拟的 HttpContextBase 上设置属性

    我正在开发一个 ASP NET MVC 应用程序 并尝试针对控制器操作编写一些单元测试 其中一些操作 HttpContext 上的属性 例如 Session Request Cookies Response Cookies 等 在弄清楚如何