如何使用 Rhino Mocks 来模拟 HttpContext.Application

2023-11-23

我是 Mocking 框架的新手,并开始使用 RhinoMocks 来协助我的 MVC 应用程序单元测试。

我在用着Scott Hanselmanns MVC 模拟助手协助模拟 HttpContext。 我已经成功地(一段时间后)模拟了一些我需要的东西,但在涉及 HttpContext 的 Application 属性时却遇到了困难。

在我的应用程序中,我在应用程序中存储一个对象并在控制器中检索它,如下所示:

SomeObj foo = (SomeObj)Application["fooKey"];

这是在我的 MVC 应用程序中的 Application_Start 上创建的。

更新了以下第一个答案(为了清晰起见,附加代码) 目前在测试设置中我这样做:

HttpContextBase mockHttpBase = mocks.FakeHttpContext();
controllerToTest = new SomeController();
mocks.SetFakeControllerContext(controllerToTest);


HttpApplicationStateBase appState = 
    MockRepository.GenerateStub<HttpApplicationStateBase>();

Globals tmpAppGlobals = 
    new Globals();

mockHttpBase.Expect(ctx => ctx.Application).Return(appState);
mockHttpBase.Expect(ctx => ctx.Application[Globals.GlobalsKey]).
    Return(tmpAppGlobals);

在我的单元测试设置中,我这样做:

Globals tmpAppGlobals = new Globals();
controllerToTest.ControllerContext.HttpContext.
            Expect(ctx => ctx.Application[Globals.GlobalsKey]).
Return(tmpAppGlobals);

对于 Application 对象,此调用引发 NullReference 异常。

我的问题有两个:

1)从设计/架构的角度来看,这是正确的方法还是我做错了什么?

2)为什么这不起作用?

提前致谢。


无需深入研究,这看起来基本上是正确的。

Application 属性在 HttpContextBase 上是虚拟的,因此您应该能够从 Rhino 为其设置返回值 - 假设您像 Scott Hanselmanns 帖子那样嘲笑 HttpContextBase。

一些可能的原因,实际上只是由于缺乏信息而猜测:

  • 您是否设置了退货 控制器ToTest.ControllerContext?
  • 您是否设置了退货that对象 HttpContext 属性?
  • 您是否设置了退货that对象应用程序属性?

我问的原因是,通常当您进行期望设置时,您已经引用了将作为测试的一部分调用的对象,因此您不会像使用您的controllerToTest.ControllerContext.HttpContext. Expect() call.

Edit:

我想我看到了问题,我认为问题出在这一部分:

Expect(ctx => ctx.Application[Globals.GlobalsKey])

我认为您假设索引器的工作方式与属性相同,但事实并非如此。你真正需要做的是对你的期望设定一个期望appState对象接收对 Item 属性的调用,如下所示:

// setup expectations -- assumes some of the expectations and mocks 
// the from original question
mockHttpBase.Expect(ctx => ctx.Application).Return(appState);
appState.Expect(ctx => ctx.Item(Globals.GlobalsKey)).Return(tmpAppGlobals);

// run the test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Rhino Mocks 来模拟 HttpContext.Application 的相关文章

  • 将 Javascript 类数组传递给 MVC 控制器?

    我正在尝试将一系列服务传递给我的控制器 我尝试了很多不同的方法来让它工作 在进入控制器之前序列化数据 序列化每个服务 唯一有效的方法是将控制器参数更改为字符串并序列化数组 然后使用 JsonConvert 但我 d 宁愿不这样做 使用指定的
  • mvc 2中的图像上传和预览

    我正在通过转换 asp net 网站来学习 mvc 2 在我的页面中 我必须上传图像并显示图像的预览 下面给出了我的 asp net 页面的屏幕截图 我将模型创建为 public class Contest public int conte
  • 服务层设计。将事物放入服务层的原因

    我有一些与设计相关的问题 should service layer interfaces居住在一个domain layer 例如user service 将代码部分移动到单独层的主要原因是什么 should service layer居住在
  • AutoMapper.Mapper 不包含 CreateMap 的定义

    这可能是一个基本问题 但想知道我没有得到 AutoMapper Mapper CreateMap 方法 我使用了错误的 AutoMapper 参考 包吗 谢谢 静态版本CreateMap方法在 4 2 中已弃用 然后在版本 5 0 中从 A
  • 带有 HttpContext 的 ASP.NET MVC 单元测试控制器

    我正在尝试为我的一个控制器编写一个单元测试 以验证视图是否正确返回 但该控制器有一个访问 HttpContext Current Session 的基本控制器 每次我创建控制器的新实例时 都会调用 basecontroller 构造函数 并
  • ASP.NET MVC 应用程序中的工作单元模式

    我一直在看这个优秀的blog http www nhforge org wikis patternsandpractices nhibernate and the unit of work pattern aspx标题为 NHibernat
  • 临时目录中自动生成的“App_Web********.cs”文件导致构建错误

    因此 这已经困扰我一段时间了 但有时在我的 Visual Studio 2013 ASP NET MVC4 项目中 我会删除未使用的 ViewModel 类 并在下一次编译时收到如下错误 对于名为 我刚刚删除的 MostRecentMemb
  • Ajax 表单从 Jquery 对话框内重定向页面

    我在部分视图中有一个 jquery 对话框 model JQueryDialogPoc Models FeedBack using Ajax BeginForm GiveFeedback Home null new AjaxOptions
  • 从 MVC 控制器调用 Web API

    我的 MVC 5 项目解决方案中有一个 Web API 控制器 WebAPI 有一个方法可以将特定文件夹中的所有文件作为 Json 列表返回 name file1 zip path c 从我的 HomeController 我想调用这个方法
  • 从另一台设备访问 Azure 模拟器

    我有两个不同的项目 Windows Phone 8 应用程序 我正在真实的物理开发设备上运行 Azure 云服务 其中包含一个简单的 WebRole 端点 其中包含 ASP NET MVC WebAPI 我的目标很简单 使用从真实设备运行的
  • SignalR 在子域上协商 404

    我创建了一个小型 MVC SignalR 应用程序 但在子域下的服务器上运行时遇到问题 http chat mydomain com http chat mydomain com 它映射到名为 chat 的文件夹 我还使用 SignalR
  • 构建视图模型的最佳方法是什么?

    我正在使用带有实体框架的 asp net mvc 并开始学习 DDD 我正在从事包含调查的项目 这是我的域模型 public class Survey public int SurveyID get set public string Na
  • asp.net mvc 主要细节

    我想使用 ASP NET MVC Entity Framework 创建一个用于订单输入的网页 此页面包含订单和订单输入信息 对于每个订单 我可以有多个订单详细信息 如果您知道如何使用 ASP NET MVC Entity Framewor
  • 起订量:无法投射到接口

    今天早些时候我问过这个question https stackoverflow com questions 2774785 moq unable to cast 因此 由于起订量从接口创建它自己的类 我无法将其转换为不同的类 所以这让我想知
  • Google Chrome 客户端的 ASP.NET MVC 路由问题

    我的 Silverlight 4 应用程序托管在 ASP NET MVC 2 Web 应用程序中 当我使用 Internet Explorer 8 浏览时 它工作正常 但是 Google Chrome 版本 5 无法找到 ASP NET 控
  • 如何在 MVC3 Razor 视图中呈现数据表

    我在 xls 电子表格 1 之间有一个可靠且经过测试的导入方法 该方法返回DataTable 我已将其定位在我的服务层中 而不是数据中 因为只有工作簿作为上传文件保存 但现在我想知道在哪里以及如何生成此内容的 HTML 表示形式DataTa
  • Active Directory 会员资格提供商 - 如何对此进行扩展?

    我正在努力通过 AD Membership Provider 启动并运行 MVC 应用程序 但在解决这个问题时遇到了一些问题 我有一个基本配置设置并在我登录时工作 电子邮件受保护 cdn cgi l email protection 密码
  • 如何从asp net core中的AuthorizationFilter重定向到登录页面?

    当我回来时ForbidResult 它重定向到AccessDenied启动时指定的页面 我想做同样的事情UnauthorizedResult 但重定向到Login page P S 我没有使用标准Authorize控制器中的属性我有自己的
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • SignalR 似乎正在减慢我的 MVC/Azure 应用程序的启动速度

    我有一个 MVC 应用程序在 Windows Azure 上的 WebRole 上的 NET 4 5 下运行 使用 SignalR 1 0 alpha2 并使用 ServiceBus 底板 在我的 App Start 文件夹中 我有 Reg

随机推荐

  • vbscript 中的 CommonAppData

    客户的应用程序 AppName 的配置文件存储在 CommonAppData 中 在 Windows XP 下是C Documents and Settings All Users Application Data AppName 在 Wi
  • Spring Boot 执行器健康指示器

    我们现在已经在几个项目中使用Spring Boot 我们使用的是最新版本1 2 3 我们正在合并执行器 到目前为止 一切运行良好 除了我们发现 health 指示器 默认 显示服务已关闭 这不是真的 这些服务是通过数据源实现的 它可能会调用
  • 从数组到列表的隐式转换

    如何编写隐式转换Array to List 类型 我尝试了以下方法 但似乎不起作用 scala gt implicit def arrayToList A ClassManifest a Array A List A a toList
  • 对于在浏览器中测试 extjs 代码(最好使用 selenium)有什么建议吗?

    我们一直在使用 selenium 来处理高级网站测试 除了模块级别的大量 python 文档测试之外 并取得了巨大成功 然而 现在我们在很多页面上使用 extjs 并且事实证明很难将 Selenium 测试纳入网格等复杂组件 有人成功为基于
  • 如何在Windows下的cmd窗口中显示日文汉字?

    我有一个英语 Windows 2003 服务器 激活了亚洲语言支持 命令窗口 cmd 设置 仅有的两种可用字体是 raster 和 lucida console 两者都无法正确显示汉字 显示为问号 有没有办法让它们显示出来 在写入控制台之前
  • 在 Delphi 中修改 Rest 服务器上的 URL

    我已经在 Delphi XE 中编写了一个 REST 服务器 使用向导 并且我想稍微更改一下 URL 这样就不用http 192 168 1 84 8080 datasnap rest TServerMethods1 GetListings
  • iOS 8.3 自定义键盘中的“UIView-Encapsulated-Layout-Width”

    我已经实现了自定义键盘 它在运行 iOS 8 2 的设备上运行良好 但是 当我在 iOS 8 3 的设备上运行相同的代码时 我收到以下警告 并且键盘的高度设置不正确 Probably at least one of the constrai
  • Protobuf-net :嵌套 IEnumerable 对象

    我正在使用 Protobuf net 序列化自定义嵌套列表 我知道原生列表不能直接嵌套 这就是为什么我使用容器对象作为内部列表 但是 我也想让我的容器对象 IEnumerable 但这意味着 Protobuf net 会抛出错误 不支持嵌套
  • Java中如何检查字符串是否只包含数字

    在 Java 的 String 类中 有一个称为 matches 的方法 如何使用此方法使用正则表达式检查我的字符串是否仅包含数字 我尝试使用下面的示例 但它们都返回错误的结果 String regex 0 9 String data 23
  • HTML/CSS。去上课吗?

    在 HTML 中 您可以使用标签 TOP 直接进入页面顶部 出于这个原因 我想也许还有可能 单击我的网页中的链接并直接转到特定的类 仅限 html csss 是否可能 不是针对特定的类 因为可以有许多元素具有相同的类名 但使用 ID 是可能
  • 在java中从dropbox下载文件

    我正在编写一个 swing 应用程序 但我确信稍后我会想到更多内容添加到其中 所以我想要一种从 dropbox 下载文件 如果是新文件 的方法 我尝试了很多不同的方法 但他们给我的只是页面的 HTML 有人知道怎么做吗 我当然不会 在我看来
  • 是否可以在同一页面上使用 2 个版本的 jQuery?

    注意 我知道已经有人问过类似的问题here and here 但我正在寻找有关如何进行这项工作的更多说明或完全避免它的充分理由 我正在向已使用旧版本 jQuery 库 1 1 3 1 的现有网站添加功能 我一直在针对最新版本的 jQuery
  • 没有这样的文件或目录错误

    这是我收到的错误 Traceback most recent call last File E stuff module py line 91 in
  • 如何停止枚举 NSAttributedString 的属性?

    在文档中enumerateAttribute据说 关于方法stop该块的参数是 该块可以将该值设置为 true 以停止对该集合的进一步处理 然而 在块内stop参数是一个let我无法将其设置为true 我需要在找到第一个属性出现后停止枚举
  • JavaScript 查找 json 值 [重复]

    这个问题在这里已经有答案了 我需要在国家 地区的 json 列表中搜索 json 是这样的 name Afghanistan code AF name land Islands code AX name Albania code AL na
  • Android RecyclerView重叠项目(卡堆栈)

    如何重叠 RecyclerView 中的项目 就像堆叠卡片一样 提前致谢 要重叠 recyclerView 行 您可以使用它 将此类添加到您的活动中 您可以自定义 vertOverlap public class OverlapDecora
  • D3 树布局可视化 - 继承具有多个父项的子项

    我是 D3 可视化的新鲜人 目前正在为数据沿袭创建 D3 树布局可视化 在数据沿袭流中 子节点可以从多个父节点派生 这是一个例子 在下面的示例中 DevLead 可能与 2 名经理一起工作 var data name Director pa
  • 如何在 Cloud Firestore 中移动文档?

    有人可以帮助我如何在 Cloud Firestore 中重命名 移动或更新文档或集合名称吗 另外 我是否可以访问我的 Cloud Firestore 以从终端或任何应用程序更新我的集合或文档 其实没有move方法允许您简单地将文档从一个位置
  • 在 Eclipse 中选择远程系统类型列表为空

    我想在 Eclipse Luna 中进行交叉编译 Windows gt Linux 但是当我想在远程系统视图中添加连接时列表为空 我已经在 Eclipse 中安装了最新的 RSE 也许我错过了一个我还不知道的重要点 这就是为什么它是空的 有
  • 如何使用 Rhino Mocks 来模拟 HttpContext.Application

    我是 Mocking 框架的新手 并开始使用 RhinoMocks 来协助我的 MVC 应用程序单元测试 我在用着Scott Hanselmanns MVC 模拟助手协助模拟 HttpContext 我已经成功地 一段时间后 模拟了一些我需